3

Management Studio でストアド プロシージャを実行して、返される結果セットのデータ型を取得する方法はありますか? テーブル名をsp_helpに渡すときの機能のようなものを探しています

4

6 に答える 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 に答える