2014-01-29 5 views
0

Нужна помощь в выполнении этого запроса. Он показывает ошибку как «Неправильный синтаксис около« 201401 ».»Dynamic Pivot Error

DECLARE @cols AS NVARCHAR(MAX), 
@query AS NVARCHAR(MAX) 


select @cols = STUFF((SELECT CONVERT (varchar(6), GETDATE(), 112) FOR XML PATH(''), TYPE 
       ).value('.', 'NVARCHAR(MAX)') 
        , 1, 1, '2')   

set @query='Select PO,ItemNo, Material, '[email protected]+' 
From 
(Select PO,ItemNo, Material, qty ,PERIOD from sch_lines) myTab 
PIVOT 
(Sum(qty) FOR PERIOD IN ('[email protected]+') 
) as pvt' 


execute sp_executesql @query 
+0

Вы должны используйте quotename 'SELECT '[' + quotename (CONVERT ....' – praveen

+0

Спасибо, Правеен, он работал .. – subasuga

ответ

0

Это не совсем ответ, но он не вписывается в комментарий. При использовании EXECUTE sp_executesql вы должны поместить параметры внутри цитаты, не добавляя их. Добавление параметров предоставляет код для SQL-инъекций.

Здесь же, как включить параметры в sp_executesql

DECLARE @something NVARCHAR(20) = N'Hello World' 

EXEC sp_executesql N'PRINT @something', N'@something varchar(20)', @something 

Для получения дополнительной информации обратитесь к http://technet.microsoft.com/en-us/library/ms188001.aspx

Основываясь на том, что ваш код должен выглядеть следующим образом

DECLARE @cols AS NVARCHAR(MAX), 
@query AS NVARCHAR(MAX) 


select @cols = STUFF((SELECT CONVERT (varchar(6), GETDATE(), 112) FOR XML PATH(''), TYPE 
       ).value('.', 'NVARCHAR(MAX)') 
        , 1, 1, '2')   

set @query='Select PO,ItemNo, Material, @cols 
From 
(Select PO,ItemNo, Material, qty ,PERIOD from sch_lines) myTab 
PIVOT 
(Sum(qty) FOR PERIOD IN (@cols) 
) as pvt' 


execute sp_executesql @query, N'@cols nvarchar(max)', @cols