Sql-Server

sys.dm_sql_referenced_entities 在加入臨時表時無法提供使用的列列表

  • October 6, 2015

我想我需要一些幫助,因為我的想法已經用完了。

在我的數據庫中,我有一個像這樣的簡單表:

CREATE TABLE dbo.Invoices 
( 
       CashDiscounts MONEY, 
       Cost MONEY 
) 
GO 

以及在 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

現在,我遇到的問題如下:我正在使用系統函式sys.dm_sql_referenced_entities來獲取Reporting.pLoadTest 使用的列列表。

SELECT * 
FROM sys.dm_sql_referenced_entities ('Reporting.pLoadTest', 'OBJECT') 

我希望這個函式的結果是:

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

但是,當我加入臨時 #t 表函式sys.dm_sql_referenced_entities時,只返回

  1. dbo.發票

如果我使用表變數而不是臨時表,這種情況下的一切都可以正常工作。我試圖擺弄文件中所寫的 tempdb 權限

需要 sys.dm_sql_referenced_entities 的 SELECT 權限和引用實體的 VIEW DEFINITION 權限。

但沒有積極的結果。

我應該怎麼做才能獲得執行選擇和連接到臨時表的儲存過程使用的列的正確結果?

這是 SQL Server 中的一個錯誤,如果您想要更改,這裡有一個 Connect 項目可以投票。

dm_sql_referenced_entities 在語句中使用臨時表時不顯示列

目前狀態:

我們認為我們不太可能解決此建議,因此我們將其關閉為“不會修復”。

感謝您的回答。就在我在這裡發布問題之前,我搜尋了 Microsoft Connect 錯誤列表,但是這裡沒有出現任何內容,我使用 dm_sql_referenced_entities 作為關鍵字。我發布了相同的錯誤,可在https://connect.microsoft.com/SQLServer/feedback/details/1859356獲得。

假設我了解 Microsoft 對此的政策。但是,我想知道是否有一種方法可以至少在我的本地 SQL Server 實例上修改並修復 sys.dm_sql_referenced_entities 函式?

引用自:https://dba.stackexchange.com/questions/116883