2012-03-07 46 views
0

好吧我不太瞭解存儲過程,但有誰知道我可以如何將其作爲SP編寫。我認爲這有點兒到達,但並不完全。基本上是我需要粘貼到我的查詢來創建它:)存儲過程創建問題

CREATE PROCEDURE sp_executesql 
as 
DECLARE 
@cols AS NVARCHAR(MAX), 
@y AS INT, 
@sql AS NVARCHAR(MAX); 

-- Construct the column list for the IN clause 
SET @cols = STUFF(
(SELECT N',' + QUOTENAME(w) AS [text()] 
FROM (SELECT DISTINCT WeekNo AS W FROM dbo.Items) AS W 
ORDER BY W 
FOR XML PATH('')), 
1, 1, N''); 


-- Construct the full T-SQL statement 
-- and execute dynamically 
SET @sql = N'SELECT * 
      FROM (SELECT ItemNo, WeekNo, Value 
        FROM dbo.Items) AS I 
      PIVOT(SUM(Value) FOR WeekNo IN(' + @cols + N')) AS P;'; 

EXEC sp_executesql @sql; 
GO 

回答

0

假設查詢語句是正確的,你只需要一個SP結構,這將是這樣的:

CREATE PROCEDURE SP_NAME @變量1型[輸入/輸出] 作爲 開始 --query 端

//執行SP EXEC SP_NAME 'valueForVariable1'

希望這有助於

0

明白了。只是不要命名爲sp_executesql,將其命名爲get_items或其他名稱。

新的程序:

CREATE PROCEDURE get_items 

as 
declare @cols AS NVARCHAR(MAX), 
@y AS INT, 
@sql AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT N',' + QUOTENAME(w) AS [text()] 
FROM (SELECT DISTINCT week_no AS W FROM weekly_items) AS W 
ORDER BY W 
FOR XML PATH('')),1, 1, N''); 

SET @sql = N'SELECT * 
FROM (SELECT item_no, week_no, totval 
FROM weekly_items) AS I 
PIVOT(SUM(totval) FOR week_no IN(' + @cols + N')) AS P;'; 

EXEC sp_executesql @sql 

GO