我想问一下SQL Server 2008的查询更新。
我想用这样的查询更新一个包含多行的表。
update #temp_cost
set acct_cd = (
select acc_no from acc_gltrans
where voucher like 'SCS/GR%'
and debit_credit > 0
)
where grn_no = (
select voucher from acc_gltrans
where voucher like 'SCS/GR%'
and debit_credit > 0
);
但是得到了这样的错误
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我希望有人可以帮我解决这个问题, 谢谢
答案 0 :(得分:0)
您正在尝试使用从子查询返回的N值分配单个值 -
acct_cd =
(select acc_no from acc_gltrans where voucher like 'SCS/GR%'
and debit_credit > 0)
在子查询中,您从acc_no
中选择了多个acc_gltrans
,
select acc_no from acc_gltrans where voucher like 'SCS/GR%'
and debit_credit > 0
如果您只运行子查询并且它只返回1行,那么您可以使用TOP(1)
select TOP (1) acc_no from acc_gltrans where voucher like 'SCS/GR%'
and debit_credit > 0
但如果您的子查询返回多行 - 我建议您重新考虑您的逻辑
此外,您正尝试更新#temp_cost
中的多行 - 因此,=
使用IN
运算符代替{<1}}。
IN
运算符将允许您更新#temp_cost
表中的多个行
所以您的查询将如下所示。
update #temp_cost set
acct_cd =
(select TOP (1) acc_no from acc_gltrans where voucher like 'SCS/GR%'
and debit_credit > 0)
where
-- HERE USE IN
grn_no IN
(select voucher from acc_gltrans where voucher like 'SCS/GR%'
and debit_credit > 0)
答案 1 :(得分:0)
这里使用此
UPDATE #temp_cost As temp set
temp.acct_cd = A.acc_no
FROM acc_gltrans as A
WHERE A.voucher like 'SCS/GR%' AND A.debit_credit > 0)
希望帮助