sys.dm_sql_referenced_entities 在加入临时表时无法提供使用的列列表

Raf*_*ski 7 sql-server metadata sql-server-2012 tempdb temporary-tables

我想我需要一些帮助,因为我没有想法。

在我的数据库中,我有一个像这样的简单表:

CREATE TABLE dbo.Invoices 
( 
        CashDiscounts MONEY, 
        Cost MONEY 
) 
GO 
Run Code Online (Sandbox Code Playgroud)

以及在 SELECT 上下文中使用此表的存储过程:

CREATE PROCEDURE Reporting.pLoadTest 
AS 
BEGIN 
        CREATE TABLE #t ( Test INT ); 

        SELECT  
                  Invoice.[CashDiscounts]       AS [CashDiscounts] 
                , Invoice.[Cost]                        AS [Cost] 
        FROM dbo.Invoices AS Invoice 
        LEFT OUTER JOIN #t -- if you remove this join, dm_sql_referenced_entities should return also CashDiscounts and Cost attributes
        ON 1=1 

END 
GO
Run Code Online (Sandbox Code Playgroud)

现在,我遇到的问题如下:我正在使用系统函数sys.dm_sql_referenced_entities来获取Reporting.pLoadTest使用的列列表

SELECT * 
FROM sys.dm_sql_referenced_entities ('Reporting.pLoadTest', 'OBJECT') 
Run Code Online (Sandbox Code Playgroud)

我希望这个函数的结果是:

  1. dbo.Invoices
  2. dbo.Invoices.CashDiscounts
  3. dbo.Invoices.Cost

但是,当我加入 temp #t 表函数sys.dm_sql_referenced_entities时,只返回

  1. dbo.Invoices

如果我使用表变量而不是临时表,则在这种情况下一切正常。我试图摆弄文档中写的 tempdb 的权限

需要对 sys.dm_sql_referenced_entities 的 SELECT 权限和对引用实体的 VIEW DEFINITION 权限。

但没有积极的结果。

我应该怎么做才能获得执行选择和连接到临时表的存储过程使用的列的正确结果?

Mik*_*son 7

这是 SQL Server 中的一个错误,如果您想要更改,这里有一个 Connect 项目可以投票。

当在语句中使用临时表时,dm_sql_referenced_entities 不显示列

当前状态:

我们认为我们不太可能会解决此建议,因此我们将其关闭为“无法解决”。