SQL Server - 将值赋给Dynamic SQL中的变量

问题描述 投票:2回答:2

我想在动态查询中为out变量赋值。

SET @query = 'IF EXISTS(Condition)
BEGIN
  --Some action goes here
  SET @result= 1
END
ELSE
BEGIN
  SET @result= 2
END'
EXEC(@query)

当我尝试执行此查询时,我收到一个错误:

必须声明标量变量“@result”。

如何在动态查询中将值设置为变量?

提前致谢。

sql sql-server
2个回答
1
投票

试试这个:

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中,您需要传递参数定义,然后传递参数映射。


1
投票

当您执行查询字符串时,它被视为一个单独的会话,因此您在当前窗口中声明的变量将无法访问,而您可以访问临时表。

所以你必须在字符串中声明变量。您的查询可以重写如下

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)

或者将结果存储在表变量中并从那里访问它

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 
© www.soinside.com 2019 - 2024. All rights reserved.