如何从TSQL中的子查询创建Update语句

如何从TSQL中的子查询创建Update语句,tsql,sql-server-2012,Tsql,Sql Server 2012,我需要更新所有符合我的条件的记录。但是下面的Sql给出了这个错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 基本上,我需要更新子查询中返回的所有记录 有人知道如何修复它吗?我不认为您在发布的查询中得到的错误可能在其他地方。同样,在EXISTS子查询中,不要说select*。。。最好说出存在的位置,从MasterAccount M中选择1 还可以尝试使用此查询的联接版本,如 UPDATE R SET R.MasterAccountId = NULL

我需要更新所有符合我的条件的记录。但是下面的Sql给出了这个错误:

子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情

基本上,我需要更新子查询中返回的所有记录


有人知道如何修复它吗?

我不认为您在发布的查询中得到的错误可能在其他地方。同样,在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))