使用某些参数更新另一个SQL表并使用某些参数更新
我目前正在使用SQL Server 2008来处理一对数据库。最近我注意到我的数据库中有一个表有错误的数据,所以纠正这一点(因为我有一个在同一个数据库中的正确数据的表的副本)我想使用更新来更新从一个表到另一个表的数据。使用某些参数更新另一个SQL表并使用某些参数更新
因此出于解释的目的,表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匹配等。
任何帮助将是最受赞赏,并随时提问,如果我有困惑您。
谢谢。
你可以在技术上使用
row_number() over (order by xyz)
两个组滤波
创建临时密钥的更新使用,使这项工作。如果你用CTE增加它,它会更容易一些。
但是(!)这是解决您描述的问题的相对复杂的方式。用你给出的数据看起来好像更容易删除坏数据,并从表中重新插入,这仍然很好。
我很新的SQL,我读了关于使用row_number()函数,但它确实让我困惑了一下。似乎每个人都建议删除数据然后插入。我不是这种方法的粉丝,但看到每个人都认为这是最好的方法,我想我会去做。感谢您的时间和帮助。 – gn12345 2014-11-06 10:14:42
我可能误解了你的问题,但只要表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'
希望有帮助。
由于每个人都在建议删除和重新插入的方法,我可能会采取这种方法。谢谢你的帮助。 – gn12345 2014-11-06 10:16:03
我很困惑。不是x.number已经等于y.number?什么领域告诉你它一样?如果y表包含正确的表格,为什么不用这些日期删除x中的行然后插入y与这些日期? – TheProvost 2014-11-06 09:41:20
您可能需要一个键或甚至多个可用于识别每个唯一行的字段。 – AbstractChaos 2014-11-06 09:43:52
X.number不等于y.number。这是我正在尝试解决的问题。从这个领域的一部分是完全一样的。不删除数据然后再插入数据的原因主要是因为我不喜欢删除数据,因为它往往会导致问题(即丢失数据,重复数据)。 – gn12345 2014-11-06 10:12:06