存储过程结果集的元数据

时间:2011-07-01 22:31:21

标签: sql sql-server stored-procedures

我使用的是Sql Server 2008。

我想获取存储过程结果集的列名数据类型。我该怎么做?像INFORMATION_SCHEMA这样的东西会有所帮助。

1 个答案:

答案 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或别名类型。