TSQL 使用子查询更新值

TSQL update value with subquery

我有 2 个 table,我想比较它们并修改 tableA (set NameMod = 1),如果它有不同的行。

为了比较 table,我使用:

 select Id, Name from tableB
 except
 select Id, Name from tableA

然后我要修改tableA

 update tableA Set NameMod = 1
 where exists (
  select Id, Name from tableB
  except
  select Id, Name from tableA
  )

但我只能在子查询之前使用 EXISTS,在这种情况下,它会更新 table 中的所有元素,而不是不同的行。

你能试试这个吗:

MERGE TableA AS [Target]
USING TableB AS [Source]
    ON [Target].[ID] = [Source].[ID]
    AND [Target].[Name ] = [Source].[Name]
WHEN NOT MATCHED BY TARGET
    THEN UPDATE SET NameMod = 1;

它正在使用 MERGE 子句。

如果你不喜欢这个子句,你可以这样使用CTE

;WITH IdsForUpdate ([id]) AS
(
    SELECT DISTINCT Id
    FROM
    (
        select Id, Name from tableB
          except
          select Id, Name from tableA
    ) DS([id], [name])
)
 update tableA 
 Set NameMod = 1
 FROM tableA A
 INNER JOIN IdsForUpdate B
    ON A.[id] =  B.[id];