【发布时间】:2019-02-28 14:20:36
【问题描述】:
当我执行此操作时:
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 语句中的变量是临时表,每次运行时(需要)更改其名称。
感谢您的帮助!
【问题讨论】:
-
将字符串创建为变量,然后执行。
-
用“print”代替exec,看看是哪一行产生了错误。
-
查看此堆栈溢出,stackoverflow.com/questions/42417688/dynamic-sql-wont-execute 并遵循批准的解决方案。它将查询字符串构建成一个变量,然后执行它
-
你真的应该在这里使用正确的连接。您有一个交叉连接,可以有效地变成与其他两个表的内部连接。
标签: sql-server tsql dynamic-sql