SQL查询 - 我可以不这样做吗?

时间:2013-07-15 19:17:45

标签: sql-server

update TABLE set A = (
SELECT
    CASE
        WHEN B - C >= A  THEN A
        WHEN B - C <  A THEN B - C
    END AS A
from 
TABLE )

我得到的回应是:

子查询返回的值超过1。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。

2 个答案:

答案 0 :(得分:3)

不,如果您的表有超过1条记录,那将无效。在这种情况下,我不确定你为什么使用子查询。我想你正在寻找这样的东西:

UPDATE MyTable
SET A = 
    CASE
        WHEN B - C >= A THEN A
        ELSE B - C
    END

此查询将更新表中每条记录的列A。如果B - C大于或等于A,则A的值将保持不变。否则,A将设置为B - C。我还会使用ELSE代替两个WHEN

答案 1 :(得分:1)

您遇到的问题是您没有在子查询中指定主键以匹配更新行的主键。因此,它返回与错误消息所指的条件匹配的所有行。

您的代码可能应该是:

UPDATE TableABC
SET A = CASE
          WHEN B - C >= A THEN A
          WHEN B - C <  A THEN B - C
        END

但是你的SQL不完整我无法确定。