Exec 语句中“=”附近的语法不正确

Incorrect syntax near '=' in Exec statement

当我执行此操作时:

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)
')

我收到以下错误:

Msg 102, Level 15, State 1, Line 2 Incorrect syntax near '='.

select 语句中的变量是临时表,它们(需要)每隔 运行 更改名称。

感谢您的帮助!

您收到该错误是因为您试图将局部变量的值设置为动态 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