• ベストアンサー

sqlserver でCreatしないでストアドを使いたい

お世話になります ストアドのクリエイトがかけられないのですが、 VB.NETで戻り値を取れるようなストアドを使用したい状況です クリエイトをかけずに戻り値があるような動的なSqlは流せるのでしょうか テーブル以外はクリエイトしてはいけないという不思議な条件がついた開発に参加することになってしまったのです・・・ どなたか御教授いただけたらありがたいです

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

戻り値としては返せませんが、 複数ステートメントを一気に投げて、結果をレコードセットとして受け取るのならできます。 こんな感じで。。 Dim sSQLString As String = & _ "DECLARE @RC int" & vbCrlf & _ "DECLARE @A varchar(4)" & vbCrlf & _ "SET @RC=0" & vbCrlf & _ "BEGIN TRY" & vbCrlf & _ "UPDATE TABLE1 SET VAL=" & sValue & " WHERE ID='" & sID & "' " & vbCrlf & _ "END TRY" & vbCrlf & _ "BEGIN CATCH" & vbCrlf & _ "SET @RC = 99" & vbCrlf & _ "END CATCH" & vbCrlf & _ "SELECT @RC"

gomuta
質問者

補足

ありがとうございます &申し訳ありません というのも、そのやり方で目的の動作する物を作ることが出来ました しかし・・ 新たに旧Ado接続にしなければいけないという制約があらわれました 旧Ado接続で、Sqlを投げて見ると下記の様なエラーになってしまい・・・ エラー内容:"オブジェクトが閉じている場合は、操作は許可されません。" 試してみると、旧Adoのレコードセットに取得する時、 declare宣言が入っているとVB側で、そんなエラーが出てしまう感じです これは諦めてVB側で全部処理させた方が良いのかもしれないと思い始めました

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。 なるほど、ADOですか。 SQL文の一番最初に「SET NOCOUNT ON(改行)」という文字列が付くようにして実行してみてください。 それは変数宣言の有無というよりもステートメント実行の都度、「○行処理されました」というメッセージが先に返されてしまうため、2つ目以降のメッセージや結果を返すことができずにそのエラーになっているのだと思います。

gomuta
質問者

お礼

ありがとうございます とても助かりました >「○行処理されました」というメッセージが先に返されてしまうため、2つ目以降のメッセージや結果を返すことができずにそのエラーになっているのだと思います。 なるほど、勉強になりました 分かってみると「こんな簡単な事か~」って感じですね

gomuta
質問者

補足

補足 返事が遅くなってしまい、すいませんでした

関連するQ&A

  • SQLServer ストアド レスポンス

    SQLServer ストアド レスポンス いつもお世話になります。 約100万件のテーブルから20行程度抽出するストアドがあります。 問合せ画面で使用していますが、通常は問題なくサクサク動くのですが、突然遅くなる時があります。 インデックスは付いてます。 そんな時、クエリアナライザで、直接ストアドを起動した後、再度画面から問い合わせると通常のスピードに戻ります。 ストアド直接起動時も最初は遅く、2回目以降は通常スピードです。 偶然なのかどうか調査中ですが、どなたかこんな経験&対処された方おりましたら、ご教授頂けないでしょうか。 SQLServer2000+VB.NETで開発してます。

  • ストアドを使う場合

    お世話になります。 ストアドをどういったときに使用したらいいか分かりません。 ストアドを使うとネットワークの負荷を軽減できるというのは 分かるのですが、単純に1テーブルを参照する場合は ストアドでなくてもそれほど変わらない? 複数にリンクがある場合に使用するべきなのですか? それともトータル値を取得したり計算を行わせたりする場合 に使用するべきなのでしょうか? 例えばVBにADOなどで直接SQL文を書くのと ストアドを呼ぶのでは 何を基準に直接SQLをよんでいいのか、ストアドを呼んだ方がいいのか 基準となる考え方がわかりません。 質問文が分かりずらかったらすみません。 お分かりになる方ご回答お願いします。

  • SQLServer2005ストアドのソース取得

    こんにちは。 VB.NET Framework 2.0で開発しています。 SQLServer2005(DB)で管理しているストアドのソースを取得するプログラムを作成 しようと考えているのですが、ローカルPCからリモートDB上で管理しているソース の取得方法が解らず困っております。ご教授お願い致します。

  • ストアドプロシージャについて

    Access2003とSQL Server2005Expressです。 初歩的な質問で恐縮です。 以下のストアドプロシージャのデータ取得先を、テーブルではなく 別のストアドプロシージャにしたいのですが、 その方法がわかりません。 CREATE PROCEDURE テスト AS SELECT コード, 社名, 住所, 電話 FROM 名簿     ↑     これをテーブルではなく、別のストアドプロシージャを     指定したのですが・・・。     ここをストアドプロシージャ名にするとエラーになります。     どうすればよろしいでしょうか?

  • ストアド実行時エラー

    vb.net2010とoracle10gを使用してます ストアドをVB.NET2010でODBC経由で実行するとodbc4200 ora-00900 sql文が無効 ですとなります。 このストアドをsql/plusからだと問題無く実行出来ます。 なぜでしょうか?

  • T-SQLで一時テーブルの名前を毎回変更できるストアドを作りたい

    お世話になります。 初歩的な質問で恐縮ですがご教示いただければ幸いです。 T-SQLでグローバル一時テーブルの名前を毎回変更できるストアドを作り、Access2003アプリから実行させる予定です。 ストアドに、CREATE TABLE [dbo].[@tablename]のように書き、 ストアド実行時に@tablenameの値を ##ABC のように入力したのですが、テーブルはtempdbではなく、しかもテーブル名は@tablenameでテーブルが作成されてしまいます。 CREATE TABLE [dbo].@tablename のように[]をとると ストアド自体を作成できずエラーになってしまいます。 宜しくお願いします。 create PROCEDURE [dbo].[ストアドプロシージャー名] (@tablename nvarchar(255)) AS BEGIN from SET NOCOUNT ON; CREATE TABLE [dbo].[@tablename] <以下省略>

  • ストアド実行時エラー

    vb.net2010とoracle10gを使用してます ストアドを実行するとodbc4200 ora-00900 sql文が無効 ですとなります。 このストアドをsql/plusからだと問題無く実行出来ます。 よろしくお願いします。

  • Oracleストアドプロシージャについて

    現在、夜間バッチで海外FTPサーバーからCSVファイルをDWHサーバーに格納後、 同DWHサーバー内のOracleテーブルにInsertするという処理の開発をしているのですが、 CSVの取得はDOSバッチとTeratermのマクロで取得しようと思っています。 しかし、CSVファイルのInsert処理はPL/SQLで開発を行おうと考えています。 それは、Insert後にそのテーブルと別サーバーのOracleテーブルを使用してデータの加工を行い、 その結果をDWHテーブルにロードしなければいけないからです。 ちなみに、今まではVBしか触ったことしかなくPL/SQLやバッチの作成はは初めてです。 そこで質問なのですが、PL/SQLで他のサーバーのテーブルとリレーションは出来るのでしょうか? (VBAでは1つのサーバーにしか同時接続できなかったため) またその場合のフローチャートのイメージが出来ないのですが、箇条書き程度で結構ですので教えていただけないでしょうか?(どこでストアドプロシージャに処理が移行するのかなど....) 長い文章でわかりにくいと思いますが、識者の方がいれば教えていただければ幸いです。

  • SQL ServerのストアドでOUTPUTパラメータを2つ

    VB.NETとSQL Serverでストアドプロシージャーを使用しています。 OUTPUTパラメータを2つ使用したいのですが、VB.NET側での受け取り方法がよくわかりません。 ご存知の方がいらっしゃいましたら、よろしくお願いします。

  • MYSQLのストアドでの動的SQLについて

    MYSQL初心者ですが、よろしくお願いします。 MYSQL(ver5.5)でストアドプロシージャを作成しようと思います。 WEBの検索画面に入力された条件に応じて、WHERE句を動的に作成したいのです。 例えば、WEBの検索画面の検索条件に、 (1)氏名 (2)住所 (3)電話番号 があり、(1)と(3)に入力された場合は、 あるテーブルの検索条件を WHERE 氏名=入力氏名 AND 電話番号=入力電話番号 のように動的にSQLを作成したいです。 (条件に応じて、静的なSQLを使い分けるやりかたはしたくない) このような動的なSQLはストアドプロシージャで作成できのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL