在Management Studio中执行存储过程以获取结果集的数据类型是否有办法?我正在寻找类似于将表名传递给sp_help
的功能答案 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