如何在视图中从存储过程返回数据SQL Server 2008

时间:2017-08-31 07:34:50

标签: sql sql-server-2008-r2

所以我有这段代码:

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您无法拥有动态视图,重点是什么?

如果您想知道如何从存储过程共享数据,那么

  

How to Share Data between Stored Procedures

是一篇很棒的文章。如果您想了解动态SQL,那么我建议

  

The Curse and Blessings of Dynamic SQL

由同一作者Erland Sommarskog撰写。对于Stack Overflow上的简单答案,这两个主题都过于宽泛。