简体   繁体   English

存储过程结果集的元数据

[英]Metadata of Stored Procedure Result Set

I use Sql Server 2008.我使用 Sql 服务器 2008。

I want to get the column names and data types of the result set of a stored proc.我想获取存储过程的结果集的列名数据类型 How can I do it?我该怎么做? Something like INFORMATION_SCHEMA would be helpful.像 INFORMATION_SCHEMA 这样的东西会有所帮助。

From an application you can inspect the potential result set by first issuing SET FMTONLY ON.从应用程序中,您可以通过首先发出 SET FMTONLY ON 来检查潜在的结果集。 However this is being phased out in future version of SQL Server in favor of a much more robust metadata discovery mechanism.然而,这将在 SQL 服务器的未来版本中逐步淘汰,以支持更强大的元数据发现机制。 In the meantime, the best you're probably going to get is by using OPENQUERY against a loopback server.同时,您可能会得到的最好结果是对环回服务器使用 OPENQUERY。 This assumes your stored procedure returns exactly one result set - if there are more than one, it isn't quite going to work.这假设您的存储过程只返回一个结果集 - 如果有多个,它就不会工作。

For example:例如:

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;

Note this also assumes that you aren't using any CLR UDTs or alias types.请注意,这还假定您没有使用任何 CLR UDT 或别名类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM