2012-03-07 6 views
0

Ok Je ne connais pas beaucoup les procédures stockées, mais est-ce que quelqu'un sait comment je pourrais écrire cela en tant que SP. Je pense que c'est un peu arrivé mais pas tout à fait. essentiellement ce que je devrais coller dans ma requête pour créer :)Procédure stockée Créer Prob

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 

Répondre

0

Si l'on suppose l'instruction de requête est correcte et vous avez juste besoin d'une structure de SP, il sera comme ceci:

CREATE PROCEDURE SP_NAME @ type variable1 [entrée/sortie] comme commencent --query fin

// pour exécuter SP EXEC SP_NAME 'valueForVariable1'

espérons que cela aide

0

Got it. Ne nommez pas sp_executesql, nommez-le get_items ou autre chose.

nouvelle procédure:

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