在变量中执行动态查询时出错
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 或字符串必须包裹在()
.
中
我正在从变量执行动态查询,但它总是显示:
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 或字符串必须包裹在()
.