我想在T-SQL中执行以下操作:
EXEC('... ' + (SELECT ...))
一个简单的具体例子是
EXEC('DROP TABLE ' + (SELECT name FROM sys.tables WHERE ...))
(显然,选择WHERE子句使得子查询总是只返回一个值。)当我尝试这个时,我收到一个错误:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '('.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.
我知道我可以通过使用变量解决这个问题,例如:
DECLARE @sql varchar(MAX)
SELECT @sql = 'DROP TABLE ' + name FROM sys.tables WHERE ...
EXEC(@sql)
但出于各种原因,我只想发表一个声明。这可能吗?
PS:如果它是相关的,那就是我试图挤入一个语句的动态SQL代码:
答案 0 :(得分:1)
您无法对传递给EXEC函数的值进行处理。
因此,您无法连接或以其他方式转换值,而是在调用之前完成。
因此答案是,不,你不能。
但是就像Pondlife说的那样,如果你说出你想要这样做的原因,那么就有可能找到一个更令人满意的答案。