使用冗长的 IN 子句更新到另一个数据库

Updating to another Database with a lengthy IN clause

我正在尝试将 Id 列对齐的表中的某些列从一个数据库更新到另一个数据库。

我有下面的查询,但我担心它会更新所有行,因为 IN 子句值不匹配。

如何将 IN 子句中的所有这些值与表 1 中的相关列相匹配?或者这是正确的吗?

UPDATE Table1
SET NAME = T2.Name
FROM OTHERDB.[Table2] as T2
WHERE T2.Id in
(
'12345678'
 --...
}

您的怀疑是正确的:您的查询将更新每一行。

您需要加入:

UPDATE T1
SET NAME = T2.Name
FROM Table1 T1
JOIN OTHERDB.Table2 as T2 ON T2.Id = T1.Id
WHERE T1.Id in (
    '12345678',
     ...
}

这假定 Id 列在数据库之间匹配。如果不是这种情况,join/where 条款将需要调整。

使用inner join意味着如果在其他数据库中没有相应的数据,则不会更新为null。

where 子句现在查找本地 table 的 Id 以提高效率。

您可以尝试以下方法:

UPDATE Table1
SET Table1.Name = T2.Name 
FROM OtherDB.Table2 T2 
WHERE T2.Id IN 
(
   SELECT Id FROM Table1 (NOLOCK) WHERE ...
)