我目前正在使用SQL Server 2008处理几个数据库。最近我注意到我的数据库中的一个表有不正确的数据,所以要纠正这个(因为我有一个正确的表副本我希望使用更新将数据从一个表更新到另一个表。
因此,出于解释目的,表X具有不正确的数据。表Y,具有正确的数据。
使我的工作更加困难的不正确数据是每条记录的唯一唯一标识符,我只想在两个特定日期之间更新这些唯一标识符。
到目前为止我得到的是:
UPDATE X
SET X.number = Y.number
FROM X, Y
WHERE X.Date >= '20130107' AND X.Date <= '20140630'
AND Y.Date >= '20130107' AND Y.Date <= '20140630'
不幸的是,虽然这可以完成这项任务,但它会获取Y行顶行的唯一标识符并将其更新为X中的所有行。显然这不是我要找的,因为我需要Y.record1来匹配X. record1,Y.record2与X.record2等匹配。
任何帮助都会受到最高的赞赏,如果我感到困惑,请随时提出问题。
谢谢。
答案 0 :(得分:0)
从技术上讲,您可以使用
来完成这项工作row_number() over (order by xyz)
在两个筛选集上创建临时密钥以在更新中使用。如果你用CTE增加它会更容易。
但是(!)这是一种解决你所描述问题的相对复杂的方法。使用您提供的数据,删除坏数据并从表中重新插入仍然很好。
答案 1 :(得分:-1)
我可能误解了你的问题,但只要表Y中的行是一个精确的副本,你想在表X中的行我将使用上面的日期标准删除表X中的行。
DELETE FROM X WHERE X.Date >= '20130107' and X.Date <= '20140630'
然后再次使用选择中使用的日期条件再次插入Y行。
INSERT INTO X SELECT Y.* FROM Y WHERE Y.Date >= '20130107' and Y.Date <= '20140630'
希望有所帮助。