如何在执行存储过程后告知数据类型?

时间:2008-08-28 19:22:17

标签: sql-server tsql ssms

在Management Studio中执行存储过程以获取结果集的数据类型是否有办法?我正在寻找类似于将表名传递给sp_help

的功能

6 个答案:

答案 0 :(得分:1)

如果通过ADO,ADO.NET,ODBC等调用存储过程,您可以查看类型:生成的记录集具有您要查找的类型信息。你真的受限于管理工作室吗?

答案 1 :(得分:1)

您最好的选择是将存储过程更改为函数。但这只适用于您的环境允许的情况。

答案 2 :(得分:0)

如果不解析syscomments以查看从哪里查询的内容,就不会想到任何简单的方法。如果您可以编辑SP以选择XML,则可以将XML_INFO附加到查询以获取架构。

答案 3 :(得分: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')

虽然,我认为必须有更好的方法。

答案 4 :(得分:0)

这不是最优雅的解决方案,但您可以使用OPENROWSET将存储的proc结果放入表中,然后使用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

答案 5 :(得分:-1)

您始终可以使用保证唯一的实际表。这是一个kludge,但它是一个选择。但这在存储过程中不起作用。

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