使用某些参数更新另一个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匹配等。

任何帮助将是最受赞赏,并随时提问,如果我有困惑您。

谢谢。

+1

我很困惑。不是x.number已经等于y.number?什么领域告诉你它一样?如果y表包含正确的表格,为什么不用这些日期删除x中的行然后插入y与这些日期? – TheProvost 2014-11-06 09:41:20

+0

您可能需要一个键或甚至多个可用于识别每个唯一行的字段。 – AbstractChaos 2014-11-06 09:43:52

+0

X.number不等于y.number。这是我正在尝试解决的问题。从这个领域的一部分是完全一样的。不删除数据然后再插入数据的原因主要是因为我不喜欢删除数据,因为它往往会导致问题(即丢失数据,重复数据)。 – gn12345 2014-11-06 10:12:06

你可以在技术上使用

row_number() over (order by xyz) 
两个组滤波

创建临时密钥的更新使用,使这项工作。如果你用CTE增加它,它会更容易一些。

但是(!)这是解决您描述的问题的相对复杂的方式。用你给出的数据看起来好像更容易删除坏数据,并从表中重新插入,这仍然很好。

+0

我很新的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' 

希望有帮助。

+0

由于每个人都在建议删除和重新插入的方法,我可能会采取这种方法。谢谢你的帮助。 – gn12345 2014-11-06 10:16:03