- PR -

T-SQLでの結果セット処理

1
投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-03-18 10:53
こんにちは、カーニーです。
MS SQL Server 7.0のT-SQLについて教えてください。

T-SQLスクリプト内で結果セットを戻すストアドプロシージャを実行し、得られた結果セットの各レコードをループで処理したいのです。
例を挙げると、次のようになります。

EXEC sp_tables
<結果セットから1レコード取得>
WHILE (レコード取得成功)
BEGIN
<レコードを処理>
<結果セットから1レコード取得>
END

なお環境はSQL Server 7.0ですが、2000で状況が異なるようであれば後学のため、併せて教えていただけると助かります。
どうぞよろしくお願いします。
nori
常連さん
会議室デビュー日: 2003/12/16
投稿数: 34
お住まい・勤務地: 新幹線線路の隣
投稿日時: 2005-03-18 12:35
こんにちは。

引用:

カーニーさんの書き込み (2005-03-18 10:53) より:

T-SQLスクリプト内で結果セットを戻すストアドプロシージャを実行し、得られた結果セットの各レコードをループで処理したいのです。
例を挙げると、次のようになります。

EXEC sp_tables
<結果セットから1レコード取得>
WHILE (レコード取得成功)
BEGIN
<レコードを処理>
<結果セットから1レコード取得>
END

なお環境はSQL Server 7.0ですが、2000で状況が異なるようであれば後学のため、併せて教えていただけると助かります。
どうぞよろしくお願いします。



カーソル処理はいかがでしょ?
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-03-18 12:41
引用:

noriさんの書き込み (2005-03-18 12:35) より:
カーソル処理はいかがでしょ?



残念ながら、ストアドプロシージャでしか取得できない情報があるのです。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-03-18 12:59
テンポラリテーブルにいったん書くとか。

insert into #tmp execute sp_hoge


テンポラリ作りたくなかったら OPENROWSET を使うとか。

select * from OPENROWSET('SQLOLEDB','hogeserver';'sa';'password', 'execute sp_hoge')

まあ、どちらにしてもさらにカーソルアクセスが必要ですけどね。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-03-18 13:39
引用:

カーニーさんの書き込み (2005-03-18 10:53) より:
なお環境はSQL Server 7.0ですが、2000で状況が異なるようであれば後学のため、併せて教えていただけると助かります。


2000では『TABLE型』が追加になっています。
テンポラリテーブルの代わりにTABLE型変数が使えますし、TABLE型を戻す関数を用意して、
select * from function_name(variable)
のような使い方が可能です。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-03-18 14:07
引用:

未記入さんの書き込み (2005-03-18 12:59) より:
テンポラリテーブルにいったん書くとか。

insert into #tmp execute sp_hoge



ばっちりいけました。

引用:

まあ、どちらにしてもさらにカーソルアクセスが必要ですけどね。



いえ、カーソルさえ定義できてしまえば、こっちのもんです。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)