如何从存储过程视图中的SQL Server 2008中

问题描述:

返回数据所以我有这样的代码:如何从存储过程视图中的SQL Server 2008中

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnName AS NVARCHAR(MAX) 

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') 
     + QUOTENAME(period) 
FROM (SELECT DISTINCT period FROM atbv_Accounting_OrdersDeliveries WHERE InvoiceNo IS NOT NULL) AS Periods 

SET @DynamicPivotQuery = 
    N'SELECT ' + @ColumnName + ' 
    FROM (SELECT 
    ArticleID, period, SUM(Amount) As Total 
    FROM atbv_Accounting_OrdersDeliveries 
    WHERE InvoiceNo IS NOT NULL 
    GROUP BY ArticleID, period 
    ) AS T 
    PIVOT(SUM(TOTAL) 
      FOR period IN (' + @ColumnName + ')) AS PVTTable' 

--Execute the Dynamic Pivot Query 
EXEC sp_executesql @DynamicPivotQuery 

我保存在我的存储过程,因为我不能在视图中声明变量。有没有办法在视图中调用这个过程?请注意,列数量也是动态的:)

谢谢!

+0

你说SQL Server 2017,但标记SQL Server 2008 R2。怎么来的? – jarlh

+0

我的不好。编辑完成。 – Benua

+0

据我所知,无法从视图执行存储过程。此外,无法执行包含动态SQL的用户定义函数。 –

尝试使用存储过程而不是视图。

如果由于任何原因而无法实现,则可以使用存储过程和客户端创建定期填充表的SQL Server代理作业,而不是使用“缓存”数据。

你不能拥有一个动态视图,会有什么意义?

如果你想知道如何从存储过程中的数据共享然后

How to Share Data between Stored Procedures

是一个伟大的文本。如果您想了解动态SQL那么我建议

The Curse and Blessings of Dynamic SQL

由同一作者,Erland Sommarskog。这两个主题都对堆栈溢出的简单回答太广泛。