使用CTE时,子查询返回的错误值超过1个

时间:2018-10-26 15:39:12

标签: sql sql-server tsql

如果QTOTALNETWORTH <(请参阅WHERE子句以获取所有字段),我需要更新QTOTALNETWORTH字段。当我使用以下查询时,出现“子查询返回了多个值...”错误。我通过主键将cte连接到ContactsQPROFILE。

此查询在哪里出错?任何帮助表示赞赏。我正在使用MSSQL。

WITH cte
     AS (SELECT ContactsQPROFILE,
                ( QVALUEOFHOME + QVALUEOFOTHERRE
                  + QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS
                  + QLIFEINSHUSTERM + QLIFEINSHUSPERM
                  + QLIFEINSWIFETER + QLIFEINSWIFEPER ) - QLIABILITIES AS TOTALNETWORTH
         FROM   ContactsQPROFILE
         WHERE  ( ( QVALUEOFHOME + QVALUEOFOTHERRE
                    + QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS
                    + QLIFEINSHUSTERM + QLIFEINSHUSPERM
                    + QLIFEINSWIFETER + QLIFEINSWIFEPER ) - QLIABILITIES > QTOTALNETWORTH )
                AND ( ( QVALUEOFHOME + QVALUEOFOTHERRE
                        + QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS
                        + QLIFEINSHUSTERM + QLIFEINSHUSPERM
                        + QLIFEINSWIFETER + QLIFEINSWIFEPER ) > 0.00 ))
UPDATE cqp
SET    cqp.QTOTALNETWORTH = cte.TOTALNETWORTH
FROM   ContactsQPROFILE cqp
       JOIN cte
         ON cte.ContactsQPROFILE = cqp.ContactsQPROFILE 

3 个答案:

答案 0 :(得分:1)

我认为您可以直接更新表格:

@if

答案 1 :(得分:0)

在这种情况下,您不需要CTE,因为您仅使用ContactsQPROFILE中的列基于ContactsQPROFILE的内部条件更新ContactsQPROFILE。

也就是说,仅运行CTE的说明性部分,看看它是否由于某些原因而产生重复项。

答案 2 :(得分:0)

由于触发器,我得到了错误。禁用该功能后,我无需使用CTE就可以运行UPDATE查询。然后,我启用了触发器。