在变量中执行动态查询时出错

Eror While Executing a dynamic queries in a variable

我正在从变量执行动态查询,但它总是显示:

Could not find stored procedure

我曾尝试使用更简单的查询,例如 set @query = 'select * from [table_name]',但它给出了同样的错误。

CREATE TABLE #test
(
    id INT IDENTITY(1, 1) NOT NULL,
    name VARCHAR(200)
)

DECLARE @TRIGER_NAME VARCHAR(200)
DECLARE @V_MAX INT
DECLARE @V_MIN INT
DECLARE @QUERY VARCHAR(MAX)

SELECT @V_MAX = MAX(id)
FROM #test

SELECT @V_MIN=Min(id)
FROM #test

WHILE @V_MIN <= @V_MAX
BEGIN
    SELECT @TRIGER_NAME = name
    FROM #test
    WHERE id = @V_MIN

    SET @QUERY = 'DROP TRIGGER '+ @TRIGER_NAME;
    EXEC @query

    SET @V_MIN = @V_MIN+1
END

在我的临时 table 中是我所有触发器名称的列表,因此我想要获得的预期输出是命令成功完成。不是 'Could not find stored procedure',因为我应该执行动态查询而不是存储过程。

而是 EXEC @query 使用 EXEC sp_executesql @query。来自 docs:

Executes a Transact-SQL statement or batch that can be reused many times, or one that has been built dynamically. The Transact-SQL statement or batch can contain embedded parameters.

或者,如果您想使用 EXEC,请将其更改为:

EXEC (@query)   

根据您的文档:

Execute a character string { EXEC | EXECUTE }
( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
[ AS { LOGIN | USER } = ' name ' ] [;]

这意味着您的@string_variable 或字符串必须包裹在().