如何通过FMTONLY获取基表名称

时间:2015-09-16 13:12:16

标签: .net sql-server tsql

我有一个工具可以通过这样做来获取有关存储过程的元数据:

SET NO_BROWSETABLE ON; 
SET FMTONLY ON;
EXEC {ProcName} {ProcParams}

传递proc名称和虚拟(null)参数。

我将其加载到数据表中并调用GetSchemaTable以确定生成的列名和数据类型。这非常有效。

但是我注意到没有任何方法可以告诉每个数据库 table 是哪一个来源,我也需要这个用于我的应用程序。有没有办法做到这一点?

(我也不依赖于以这种方式获取元数据,所以我愿意完全以不同的方式完成这些建议。)

1 个答案:

答案 0 :(得分:0)

您可以尝试sys.dm_exec_describe_first_result_set获取有关结果集的所有元数据。适用于 SQL Server 2012 +

<强> SQLFiddleDemo

DECLARE @tsql NVARCHAR(MAX) = 
  N'select a.PartId , a.PartName , b.GroupName 
from Parts as a inner join Groups as b 
on a.GroupRef = b.GroupId';

SELECT name AS [Columns]
FROM sys.dm_exec_describe_first_result_set(@tsql, NULL, 1)

同样适用于:

SELECT *
FROM sys.dm_exec_describe_first_result_set(N'EXEC dbo.procedure_name', NULL, 1);

请注意,存在限制more info