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
当我执行此操作时:
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