是否可以在不使用变量的情况下使用基于子查询的动态sql?

时间:2012-10-24 14:28:34

标签: sql-server tsql dynamic-sql

我想在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代码:

1 个答案:

答案 0 :(得分:1)

您无法对传递给EXEC函数的值进行处理。

因此,您无法连接或以其他方式转换值,而是在调用之前完成。

因此答案是,不,你不能。

但是就像Pondlife说的那样,如果你说出你想要这样做的原因,那么就有可能找到一个更令人满意的答案。