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

时间:2018-01-04 06:40:59

标签: sql sql-server

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

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

当我尝试执行此查询时,出现错误:

  

必须声明标量变量" @ result"。

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

提前致谢。

2 个答案:

答案 0 :(得分: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 :(得分: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