- - PR -
SQL ServerのT-SQLで
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-05-01 21:17
SQL Server2005でストアドプロシージャを作ろうと思うのですが、カーソルにパラメータを実装できないそうで困っています。
やりたいことは、 「ワークテーブルからSELECTして、別のテーブルにINSERT or UPDATEする」 です。 ワークテーブルからSELECTするところをカーソルにするのですが、SELECT条件は可変なので、その部分をパラメータでカーソルに渡したいのです。 Oracleならできたんですが・・・。 どうすれば実現できますか? | ||||
|
投稿日時: 2006-05-02 17:35
まだ2005を触ってすらいないのですが、2000ではカーソル定義をする際のSQLに普通にパラメタを使用しています。
http://msdn2.microsoft.com/ja-jp/library/ms180169(SQL.90).aspx MSDNを見る限り、例に以下のような記述があります。
「パラメタ」とおっしゃっているのは、ここでの @vendor_id ですよね? | ||||
|
投稿日時: 2006-05-04 21:28
使えることはわかったんですけど、実際にプロシージャで使ってみると、カーソルから結果が返りません。
以下のように書いています。 CREATE PROCEDURE hoge(@param1 int) AS DECLARE C1 CURSOR FOR SELECT CODE_1 FROM TableA WHERE COLUMN_1 = '0' AND COLUMN_2 = @param1 BEGIN .... END @param1をローカル変数に代入し、そのローカル変数をカーソルに書いても同じです。 また、カーソル定義の「@param1」をプロシージャ実行時の引数に渡していた数値に書き換えると結果は返ります。 T-SQLは初めてなもので原因が全く分かりません。 何が間違っているのでしょうか? | ||||
|
投稿日時: 2006-05-05 03:26
カーソル宣言部分だけ書かれても、正しい使い方がされているか判断できません。
簡単なストアドプロシジャ例を、下記に示します。
| ||||
|
投稿日時: 2006-05-05 09:42
私の単純なコーディングミスでした。
ありがとうございました。 | ||||
|
投稿日時: 2006-11-24 15:56
僕も6.5からの移行でハマりました
いわゆるSQLのパラメタというのは実行時(CURSORであればOPEN時)にバインドされるものと思いますが、SQL ServerのCURSORにはこの意味のパラメタは使用できないようです。 かめたろさんの挙げた、http://msdn2.microsoft.com/ja-jp/library/ms180169(SQL.90).aspx に「カーソルを宣言する select_statement の一部として、変数を使用できます。カーソルが宣言された後、カーソル変数の値は変更されません。SQL Server のバージョン 6.5 以前では、カーソルが再オープンされるたびに変数の値が更新されます。」とあります。 (このページの例では カーソルのDECLAREとDEALLOCATEを繰り返しています) | ||||
1
