SQL错误:当子查询跟随=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做

时间:2014-11-28 14:50:49

标签: sql sql-server-2008 stored-procedures sql-server-2012

我在SQL Server 2012中遇到此错误:

 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , > , >= or when the subquery is used as an expression.

这是我的剧本:

CREATE PROCEDURE dbo.Update_F_ARTCLIENT

@PK varchar(19)
,@AR_Ref varchar(19)
,@AC_Categorie smallint
,@AC_PrixVen numeric(24,6)
,@AC_Coef numeric(24,6)
,@AC_PrixTTC smallint
,@AC_Remise numeric(24,6)

AS
BEGIN

SET NOCOUNT ON;

UPDATE [dbo].[F_ARTCLIENT]

SET

[AR_Ref] = @AR_Ref
,[AC_Categorie] = @AC_Categorie 
,[AC_PrixVen] = @AC_PrixVen
,[AC_Coef]= @AC_Coef
,[AC_PrixTTC] = @AC_PrixTTC
,[AC_Remise] = @AC_Remise

WHERE (SELECT CONCAT([AR_Ref], [AC_Categorie]) as PK FROM [dbo].[F_ARTCLIENT])= @PK

END

3 个答案:

答案 0 :(得分:2)

当错误描述报告时,您的子查询返回的值不止一个。您可以通过这种方式避免这种更改子查询:

(SELECT TOP 1 CONCAT([AR_Ref], [AC_Categorie]) as PK FROM [dbo].[F_ARTCLIENT])= @PK)

答案 1 :(得分:0)

尝试将WHERE条件修改为:

WHERE CONCAT([AR_Ref], [AC_Categorie]) = @PK

答案 2 :(得分:0)

问题显然在where子句中。据推测,您希望在此条件为真的情况下进行更新。一个工资是将逻辑更改为in

WHERE @pk in (SELECT CONCAT([AR_Ref], [AC_Categorie]) as PK FROM [dbo].[F_ARTCLIENT])

但是,我注意到子查询中的表与要更新的数据相同。你真的只是这个意思:

WHERE @pk = CONCAT([AR_Ref], [AC_Categorie])

也就是说,我不认为子查询是必要的。