2012-03-07 73 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