【问题标题】:SQL ERROR: This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expressionSQL 错误:当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的
【发布时间】:2014-11-28 14:50:48
【问题描述】:

我在 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

【问题讨论】:

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


【解决方案1】:

正如错误描述报告的那样,您的子查询返回的不仅仅是一个值。您可以通过这种方式避免更改子查询:

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

【讨论】:

    【解决方案2】:

    尝试将您的 WHERE 条件修改为:

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

    【讨论】:

      【解决方案3】:

      问题显然出在where 子句中。大概,您想在此条件为真的情况下进行更新。一种报酬是将逻辑更改为in

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

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

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

      也就是说,我认为子查询没有必要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多