Неверный синтаксис рядом с '=' в операторе Exec - PullRequest
0 голосов
/ 28 февраля 2019

когда я выполняю это:

declare @INP_ITBL_NM_SQL char (64)
Exec('
    select '+@INP_ITBL_NM_SQL+' = 
            concat(LTRIM(RTRIM(a.db_schema_name)),LTRIM(RTRIM(b.Name)))
            from '+@db_and_schema+' as a, '+@split_itbl+' as b
            where b.ID = 2 and a.libname = (select c.Name from 
            '+@split_itbl+' as c where c.ID = 1)
')

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

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

Переменные внутри оператора select являются временными таблицами, которые (необходимо) меняют свое имя при каждом запуске.

Спасибо за помощь!

1 Ответ

0 голосов
/ 28 февраля 2019

Вы получаете эту ошибку, потому что вы пытаетесь установить значение локальной переменной в значение из динамического SQL.Поэтому, когда вы распечатываете этот текст SQL, он выглядит примерно так:

SELECT = concat…

Вы должны сделать это, используя выходные параметры с sp_executesql.Примерно так:

DECLARE @SQL nvarchar(max)
DECLARE @ParamDef nvarchar(200)
DECLARE @INP_ITBL_NM_SQL varchar(100) = ''

SET @ParamDef = N'@INP_ITBL_NM_SQL_OUTPUT varchar(100) OUTPUT';

SET @SQL = N'select @INP_ITBL_NM_SQL_OUTPUT = concat(LTRIM(RTRIM(a.db_schema_name)),LTRIM(RTRIM(b.Name)))
            from '+ @db_and_schema+ ' as a, ' + @split_itbl +' as b
            where b.ID = 2 and a.libname = (select c.Name from 
            '+ @split_itbl +' as c where c.ID = 1)'

EXEC sp_executesql @SQL, @ParamDef, @INP_ITBL_NM_SQL_OUTPUT=@INP_ITBL_NM_SQL OUTPUT;

SELECT @INP_ITBL_NM_SQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...