如何从TSQL中的子查询创建Update语句
我需要更新所有符合我的条件的记录。但是下面的Sql给出了这个错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 基本上,我需要更新子查询中返回的所有记录如何从TSQL中的子查询创建Update语句,tsql,sql-server-2012,Tsql,Sql Server 2012,我需要更新所有符合我的条件的记录。但是下面的Sql给出了这个错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 基本上,我需要更新子查询中返回的所有记录 有人知道如何修复它吗?我不认为您在发布的查询中得到的错误可能在其他地方。同样,在EXISTS子查询中,不要说select*。。。最好说出存在的位置,从MasterAccount M中选择1 还可以尝试使用此查询的联接版本,如 UPDATE R SET R.MasterAccountId = NULL
有人知道如何修复它吗?我不认为您在发布的查询中得到的错误可能在其他地方。同样,在EXISTS子查询中,不要说select*。。。最好说出存在的位置,从MasterAccount M中选择1 还可以尝试使用此查询的联接版本,如
UPDATE R
SET R.MasterAccountId = NULL
FROM Receivable R
JOIN MasterAccount M ON M.BillingAccountId = R.BillingAccountId
OR M.TaskAccountId = R.TaskAccountId
WHERE ISNULL(M.BillingAccountId, 0) > 0
OR ISNULL(M.TaskAccountId, 0) > 0;
你能试试这个吗。这是基于此链接上的回复
您想更新哪个表:MasterAccount还是应收账款?另外,我认为SQL不会产生引用的错误。您复制了正确的代码吗?我想更新:应收账款.MasterAccountId,我想在该字段中为应收账款中所有在MasterAccount表中具有匹配BillingAccountId或TaskAccountId的记录设置NULL@BlorgbeardYes,我在Sql Server中运行了相同的Sql。完整的错误是:Msg 512,级别16,状态1,过程SetReceivableMasterAccount,第47行子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。声明已经被终止。我很抱歉,伙计们,但我发现了问题。我有另一个触发器,这个错误来自触发器…:
UPDATE R
SET R.MasterAccountId = NULL
FROM Receivable R
JOIN MasterAccount M ON M.BillingAccountId = R.BillingAccountId
OR M.TaskAccountId = R.TaskAccountId
WHERE ISNULL(M.BillingAccountId, 0) > 0
OR ISNULL(M.TaskAccountId, 0) > 0;
UPDATE
R
SET
R.MasterAccountId = NULL
FROM
Receivable R
INNER JOIN
MasterAccount M
ON
(ISNULL(M.BillingAccountId, 0) > 0 AND M.BillingAccountId = R.BillingAccountId) OR
(ISNULL(M.TaskAccountId, 0) > 0 AND M.TaskAccountId = R.TaskAccountId))