我们如何在子查询 SQL Server 中分配局部变量

Posted

技术标签:

【中文标题】我们如何在子查询 SQL Server 中分配局部变量【英文标题】:How can we assign local variable in sub query SQL Server 【发布时间】:2014-11-29 04:36:09 【问题描述】:

我试图在子查询中为变量设置一个值,但它不起作用。

这是我的查询:

declare @val1 int
declare @val2 int

select @val1 = sum(column1) 
,(select @val2 = (select sum(column2) from table2))
,(@val1+@val2)Result
from table 1 

我想要做的是为子查询设置@val2 请帮帮我 我的意思是在子查询中设置而不是单独的选择语句

【问题讨论】:

你需要向我们展示一些代码,你需要阅读并向How do I ask a good question?学习 为什么不使用 3 个单独的 select 语句? 我需要多次使用@val2,所以我的查询可能太长了 【参考方案1】:

只需使用 3 个单独的选择:

select @val1 = sum(column1) from table1 
select @val2 = sum(column2) from table2
select (@val1+@val2) as Result

或者你也可以写2个选择:

 select @val1 = sum(column1), 
        @val2 = (select SUM(column2) from table2)
 from table1
 select (@val1 + @val2) Result

但不仅仅是 1 个选择:

为变量赋值的 SELECT 语句不能是 结合数据检索操作

如果你需要一次完成所有的选择并返回一个记录集,不要使用变量,这样做:

SELECT sum1 + sum2 FROM (
    select sum(column1) as sum1, 
           (select SUM(column2) from table2) as sum2
    from table1
) subquery

【讨论】:

我上面的代码只是为了便于理解我的问题,但实际上我对分配给 val2 的查询很长,所以我必须多次使用它 我在尝试使用您的第二种方法时遇到了这个错误 我得到了这个错误:Msg 141, Level 15, State 1, Line 7 为变量赋值的 SELECT 语句不能与数据检索操作。 第二种方法效果很好,您尝试将 2 个选择合并为一个,这就是问题所在。如果要一次性处理所有选择并返回记录集,请不要使用变量。

以上是关于我们如何在子查询 SQL Server 中分配局部变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在选择查询中分配字符串变量

sql SQL查询以查找当前用户在数据库中分配的角色

如何在子查询 SQL Server 中选择多个项目

UnboundLocalError:在同步数据库中分配之前引用了局部变量“full_path”

SQL Server - 在子查询中使用主查询中的列

SQL Server - 在子查询中使用列别名