我使用的是Sql Server 2008。
我想获取存储过程结果集的列名和数据类型。我该怎么做?像INFORMATION_SCHEMA这样的东西会有所帮助。
答案 0 :(得分:3)
从应用程序中,您可以通过首先发出SET FMTONLY ON来检查潜在的结果集。但是,在SQL Server的未来版本中,这将逐步淘汰,以支持更强大的元数据发现机制。与此同时,您可能会得到的最好的方法是对环回服务器使用OPENQUERY。这假设您的存储过程只返回一个结果集 - 如果有多个结果集,则它不会完全起作用。
例如:
EXEC master.dbo.sp_addlinkedserver
@server = 'LOOPBACK_SERVER',
@srvproduct = '',
@provider = 'SQLOLEDB',
@datasrc = @@SERVERNAME;
SELECT * INTO #foo
FROM OPENQUERY(LOOPBACK_SERVER, 'EXEC db_name.dbo.proc_name');
SELECT c.name, t.name, t.max_length, t.precision, t.scale
FROM tempdb.sys.columns AS c
INNER JOIN sys.types AS t
ON c.system_type_id = t.system_type_id
WHERE c.[object_id] = OBJECT_ID('tempdb..#foo');
DROP TABLE #foo;
请注意,这也假设您没有使用任何CLR UDT或别名类型。