Management Studio でストアド プロシージャを実行して、返される結果セットのデータ型を取得する方法はありますか? テーブル名をsp_helpに渡すときの機能のようなものを探しています
Marshall
質問する
241 次
6 に答える
1
ただし、ADO、ADO.NET、ODBC などを介してストアド プロシージャを呼び出すと、型を確認できます。結果のレコードセットには、探している型情報が含まれています。本当にManagement Studioに制限されていますか?
于 2008-08-28T19:36:47.747 に答える
1
最善の策は、ストアド プロシージャを関数に変更することです。ただし、それは環境で許可されている場合にのみ機能します。
于 2008-10-01T12:57:20.210 に答える
0
実際には、SP 内から実行できます。
EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName')
EXEC ('select * into tmp_TableName from MyTable')
-- Grab the column types from INFORMATION_SCHEMA here
EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName')
とはいえ、もっと良い方法があるはずだと思います。
于 2008-10-01T02:44:56.187 に答える
0
syscomments を解析して、どこから何をクエリしているのかを確認する以外に、簡単な方法は思い浮かびません。SP を編集して XML を選択できる場合は、クエリに XML_INFO を追加してスキーマを取得できます。
于 2008-08-28T19:32:58.767 に答える
0
これは最も洗練されたソリューションではありませんが、OPENROWSET を使用してストアド プロシージャの結果をテーブルに配置し、sp_help を使用してその説明を取得できます。
例えば
select * into tmp_Results
from openrowset( 'SQLOLEDB.1'
, 'Server=your_server_name;Trusted_Connection=yes;'
, 'exec your_stored_proc')
exec sp_help 'tmp_Results'
drop table tmp_Results
于 2008-10-01T09:04:48.350 に答える
-1
一意であることが保証されている実際のテーブルをいつでも使用できます。面倒ですが、オプションです。ただし、これはストアド プロシージャ内では機能しません。
if exists (select * from sys.tables where name = 'tmp_TableName')
drop table tmp_TableName
go
select * into tmp_TableName from MyTable
--do some stuff
go
if exists (select * from sys.tables where name = 'tmp_TableName')
drop table tmp_TableName
go
于 2008-09-15T17:43:19.320 に答える