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

use*_*664 4 c# sql-server sql-server-2008 vb.net-2010

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

这是我的查询:

declare @val1 int
declare @val2 int

select @val1 = sum(column1) 
,(select @val2 = (select sum(column2) from table2))
,(@val1+@val2)Result
from table 1 
Run Code Online (Sandbox Code Playgroud)

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

Voj*_*nal 6

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

select @val1 = sum(column1) from table1 
select @val2 = sum(column2) from table2
select (@val1+@val2) as Result
Run Code Online (Sandbox Code Playgroud)

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

 select @val1 = sum(column1), 
        @val2 = (select SUM(column2) from table2)
 from table1
 select (@val1 + @val2) Result
Run Code Online (Sandbox Code Playgroud)

但不仅仅是1个选择:

为变量赋值的 SELECT 语句不得与数据检索操作结合使用

如果您需要在一次选择中完成所有操作并返回一个记录集,请不要使用变量,请这样做:

SELECT sum1 + sum2 FROM (
    select sum(column1) as sum1, 
           (select SUM(column2) from table2) as sum2
    from table1
) subquery
Run Code Online (Sandbox Code Playgroud)