Ошибка в динамическом SQL SP - PullRequest
0 голосов
/ 23 марта 2011

Я создал процедуру, код которой такой:

   Create PROCEDURE Sample( @ID INT )
AS 
    BEGIN
    DECLARE @SQL NVARCHAR(max)
    DECLARE @SchemaName SYSNAME
    DECLARE @TableName SYSNAME
    DECLARE @DatabaseName SYSNAME


     SELECT  @SQL = 'Create Table ' + @DatabaseName + '.'
            + @SchemaName + '.' + @TableName
            + '_temp' + '('
    SELECT  @SQL = @SQL + 'ID int NOT NULL Primary Key, Name VarChar(10))'  

Я всегда получаю ошибку как:

Сообщение 102, Уровень 15, Состояние 1, Строка 77 Неверный синтаксис рядом с ','.

Может ли кто-нибудь помочь мне в этом?

Ответы [ 4 ]

3 голосов
/ 23 марта 2011

Ваш строковый литерал имеет неудачную длину.Неявное преобразование строки из varchar в nvarchar усекает строки длиной от 4000 до 8000 символов до 4000 символов.

Используйте префикс N перед строковым литералом, чтобы избежать неявного преобразования строки.

2 голосов
/ 23 марта 2011

Не используйте PRINT. Скорее всего, сам вывод PRINT будет обрезан с длинным текстом. Используйте

SELECT @SQL as [processing-instruction(x)] FOR XML PATH 

для проверки значений таких переменных в SSMS.

0 голосов
/ 23 марта 2011

Я изменил ваше первоначальное объявление @SQL на DECLARE @SQL VARCHAR(max), и оно сработало (вместо NVARCHAR).

0 голосов
/ 23 марта 2011

Иногда при использовании динамического sql мне полезно напечатать переменную:

PRINT @SQL

Таким образом, вы можете взять вывод и посмотреть на него в анализаторе

...