Ошибка EXECUTESQL - PullRequest
       37

Ошибка EXECUTESQL

0 голосов
/ 24 февраля 2012

Вот следующий фрагмент кода, который я пытаюсь выполнить на SQL Server.

DECLARE @string NVARCHAR(MAX) = '
    CREATE PROC [dbo].[Trend]
    @slsID NVARCHAR(20)
    AS
    BEGIN
    SET NOCOUNT ON
    DECLARE @BeginningRange varchar(20),
    @EndingRange varchar(20)
    SET @EndingRange = ''12*13''
    SET @BeginningRange = ''12*02''
    ;WITH CTE1 AS(
             SELECT 
             dbo.Field1,dbo.Field2,dbo.Field3
             FROM dbo.Table1 join dbo.Table2 where...conditions
             weekNum BETWEEN (@BeginningRange) AND (@EndingRange)
                 )
    SELECT * FROM CTE1 
    UNPIVOT
      ( numbers for type in (Field1, Field2, Field3, Field4)
      ) as p PIVOT
      (
      Sum(numbers) for
      WeekNum in ([12*02],[12*03],[12*04],[12*05],[12*06],[12*07],[12*08],[12*09],[12*10],                                                         [12*11],[12*12],[12*13])
      ) as q
      END
'
    EXECUTE SP_EXECUTESQL @STRING

Когда я пытаюсь запустить это, он выдает ошибку, говоря, что

"Неверный синтаксис рядом с ключом 'как'"

Я вынул этот код и выполнил его отдельно, и он не выдал ошибку. Я что-то здесь упускаю?

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

Выглядят как пропущенные скобки вокруг параметра к процедуре.

Один из приемов, который вы можете использовать, - это распечатать инструкцию sql, а затем попытаться выполнить ее - сообщение об ошибке может дать вам больше информации

print @STRING
0 голосов
/ 24 февраля 2012
where...conditions 

Это не пройдет проверку синтаксиса.Если вы удалили действительные условия, возможно, именно в этом ваша ошибка.И:

dbo.Table1 join dbo.Table2 

не имеет предложения ON

Я увидел оба из них, проверив синтаксис результатов print @string, что является первым шагом, который вы должны были предпринять, чтобы найтивопрос.Я по-прежнему говорю, что на основании того, что вы нам дали, нет никакой причины использовать динамический SQl, и использование динамического SQL - плохая практика, если вам это не нужно.

0 голосов
/ 24 февраля 2012

Для предложений PIVOT и UNPIVOT требуется две закрывающие скобки.

UNPIVOT (... FOR ... IN (...) ) AS ...

PIVOT (... FOR ... IN (...) ) AS ...

...