1

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

4

1 回答 1

1

您不能对传递给 EXEC 函数的值进行处理。

因此,您不能连接或以其他方式转换该值,因为它是在调用之前完成的。

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

But like Pondlife said, if you give the reason why you want to do it this way, it will be possible to find a more satisfying answer.

于 2012-10-24T14:33:56.353 回答