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)
我希望这个函数的结果是:
但是,当我加入 temp #t 表函数sys.dm_sql_referenced_entities时,只返回
如果我使用表变量而不是临时表,则在这种情况下一切正常。我试图摆弄文档中写的 tempdb 的权限
需要对 sys.dm_sql_referenced_entities 的 SELECT 权限和对引用实体的 VIEW DEFINITION 权限。
但没有积极的结果。
我应该怎么做才能获得执行选择和连接到临时表的存储过程使用的列的正确结果?
这是 SQL Server 中的一个错误,如果您想要更改,这里有一个 Connect 项目可以投票。
当在语句中使用临时表时,dm_sql_referenced_entities 不显示列
当前状态:
我们认为我们不太可能会解决此建议,因此我们将其关闭为“无法解决”。