使用冗长的 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 ...
)
我正在尝试将 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 ...
)