【发布时间】:2020-08-18 04:09:01
【问题描述】:
我有一个非常简单的带有值的表:
CREATE TABLE multiplication(
a SMALLINT, b SMALLINT);
INSERT INTO multiplication(a, b)
VALUES (1, 2), (2, 4), (3, 3)
当我尝试打印结果时
DECLARE @Result INT;
SELECT @Result = (SELECT a, b, a * b AS c FROM multiplication)
PRINT @Result
我收到了错误
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
我知道我收到此错误是因为我试图将两列分配给一个变量。然后我删除其他列并得到错误
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我也尝试选择顶部,但没有运气。那么如何获得包含多列和子查询的查询返回超过 1 个值的结果呢?
【问题讨论】:
-
您不能将结果集(这是您的 SELECT 语句返回的内容)分配给标量值(您的局部变量)。想想你的目标和你想要完成的事情。就目前而言,您无法执行此分配/打印逻辑。
-
您希望
@Result的单个值 得到这个代码吗?您不仅要尝试分配三个值(a、b和a * b),还要尝试分配这些值三次(表中的每一行一次)。 -
您希望如何将 3 列、3 行 SELECT 放入标量变量@Result???
-
“那么如何获得包含多列和子查询的查询返回超过 1 个值的结果?”。您创建一个表变量而不是标量变量。
标签: sql-server