我想在动态查询中为out
变量赋值。
SET @query = 'IF EXISTS(Condition)
BEGIN
--Some action goes here
SET @result= 1
END
ELSE
BEGIN
SET @result= 2
END'
EXEC(@query)
当我尝试执行此查询时,出现错误:
必须声明标量变量" @ result"。
如何在动态查询中将值设置为变量?
提前致谢。
答案 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