SQL 服务器 - 为动态内部的变量赋值 SQL
SQL Server - Assign value to variable inside Dynamic SQL
我想在动态查询中为 out
变量赋值。
SET @query = 'IF EXISTS(Condition)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END'
EXEC(@query)
当我尝试执行此查询时,出现错误:
Must declare the scalar variable "@result".
如何在动态查询中为变量设置值?
提前致谢。
试试这个:
DECLARE @result INT
,@query NVARCHAR(MAX);
SET @query = 'IF (1 = 0)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END';
EXEC sp_executesql @query, N'@result INT OUTPUT',@result = @result OUTPUT
SELECT @result;
您可以使用sp_executesql来执行动态T-SQL语句并初始化SQL变量。在sp_executesql
你需要传递参数定义,然后传递参数映射。
当您执行查询字符串时,它被视为一个单独的会话,因此您在当前 windows 中声明的变量将无法访问,而您可以访问临时 tables.
所以你必须在字符串中声明变量。您的查询可以重写如下
SET @query = '
DECLARE @result INT
IF EXISTS(Condition)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END'
EXEC(@query)
或者将结果存储在 table 变量中并从那里访问它
DECLARE @Tablevar TABLE
(
Result INT
)
SET @query = '
IF EXISTS(Condition)
BEGIN
--Some action goes here
select 1
END
ELSE
BEGIN
SELECT 2
END'
INSERT INTO @Tablevar
EXEC(@query)
select @Result = Result FROM @Tablevar
我想在动态查询中为 out
变量赋值。
SET @query = 'IF EXISTS(Condition)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END'
EXEC(@query)
当我尝试执行此查询时,出现错误:
Must declare the scalar variable "@result".
如何在动态查询中为变量设置值?
提前致谢。
试试这个:
DECLARE @result INT
,@query NVARCHAR(MAX);
SET @query = 'IF (1 = 0)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END';
EXEC sp_executesql @query, N'@result INT OUTPUT',@result = @result OUTPUT
SELECT @result;
您可以使用sp_executesql来执行动态T-SQL语句并初始化SQL变量。在sp_executesql
你需要传递参数定义,然后传递参数映射。
当您执行查询字符串时,它被视为一个单独的会话,因此您在当前 windows 中声明的变量将无法访问,而您可以访问临时 tables.
所以你必须在字符串中声明变量。您的查询可以重写如下
SET @query = '
DECLARE @result INT
IF EXISTS(Condition)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END'
EXEC(@query)
或者将结果存储在 table 变量中并从那里访问它
DECLARE @Tablevar TABLE
(
Result INT
)
SET @query = '
IF EXISTS(Condition)
BEGIN
--Some action goes here
select 1
END
ELSE
BEGIN
SELECT 2
END'
INSERT INTO @Tablevar
EXEC(@query)
select @Result = Result FROM @Tablevar