“子查询返回超过 1 个值。当子查询跟在 =、!=、、>= 后面或子查询用作表达式时,这是不允许的。”
我在调试以下代码时收到此有线错误消息:
WHEN NOT EXISTS(SELECT 1
FROM defs WITH(NOLOCK)
WHERE defaultname = @DEFAULT_CURRENCY
AND defaultvalue= @currency)
AND NOT EXISTS( SELECT 1
FROM supp WITH(NOLOCK)
WHERE pint = @ID
AND currency= @currency)
THEN "NOT VALID."
关于错误消息,我找不到我的代码有任何问题。此外,当我更改时,此错误消息消失'AND' to 'OR'.
WHEN NOT EXISTS(SELECT 1
FROM defs WITH(NOLOCK)
WHERE defaultname = @DEFAULT_CURRENCY
AND defaultvalue= @currency)
OR NOT EXISTS( SELECT 1
FROM supp WITH(NOLOCK)
WHERE pint = @ID
AND currency= @currency)
THEN "NOT VALID."
我需要使用“AND”条件,但如何消除错误?
(代码片段中的所有@变量都不是表变量。)
提前致谢。
该错误告诉您您的子查询之一,但我不认为这些子查询是给出错误的子查询。
如果您使用 and 'exist' (或 'not exit' ),您也可以使用 TOP 1,因为您只需要检查一行。
这意味着您可以使用:
WHEN NOT EXISTS(SELECT TOP 1 1
FROM defs WITH(NOLOCK)
WHERE defaultname = @DEFAULT_CURRENCY
AND defaultvalue= @currency)
OR NOT EXISTS( SELECT TOP 1 1
FROM supp WITH(NOLOCK)
WHERE pint = @ID
AND currency= @currency)
但这不是导致您错误的原因。
此示例代码执行相同的操作并且工作正常:
declare @table1 table (
id int,
value nvarchar(100)
)
declare @subquery table (
id int,
value nvarchar(100)
)
insert into @table1 values (1, 'one')
insert into @table1 values (2, 'two')
insert into @table1 values (3, 'three')
insert into @subquery values (1, 'also one')
insert into @subquery values (3, 'also three')
insert into @subquery values (5, 'also five')
select * from @table1 sourceTable
where not exists (select 1 from @subquery where id = sourceTable.id)
and not exists (select 1 from @subquery where value = sourceTable.value)
所以我认为它一定在你查询的另一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)