如何从存储过程视图中的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
我保存在我的存储过程,因为我不能在视图中声明变量。有没有办法在视图中调用这个过程?请注意,列数量也是动态的:)
谢谢!
答
尝试使用存储过程而不是视图。
如果由于任何原因而无法实现,则可以使用存储过程和客户端创建定期填充表的SQL Server代理作业,而不是使用“缓存”数据。
答
你不能拥有一个动态视图,会有什么意义?
如果你想知道如何从存储过程中的数据共享然后
是一个伟大的文本。如果您想了解动态SQL那么我建议
由同一作者,Erland Sommarskog。这两个主题都对堆栈溢出的简单回答太广泛。
你说SQL Server 2017,但标记SQL Server 2008 R2。怎么来的? – jarlh
我的不好。编辑完成。 – Benua
据我所知,无法从视图执行存储过程。此外,无法执行包含动态SQL的用户定义函数。 –