如果列匹配另一条记录中同一列的值,则MSSQL 2008更新记录

时间:2014-05-30 21:36:07

标签: sql sql-server sql-server-2008

第一次在这里问一个问题。为了给出一点背景知识,我们有一个包含PC的配置信息的数据库。这些配置包含其中序列号的字段以及联系人(使用PC)的字段。始终手动设置联系人字段,现在我们已移至新的命名方案,这意味着已使用新名称重新创建了所有配置记录。我们需要使用旧记录中的联系人值更新正在创建的新记录,所有记录都在名为' Config'

的同一个表中

实施例

OLD:machineid.location

新:location.machineid

我已经能够编写一个SELECT查询来选择与序列号匹配的记录,但是我很难将其转换为UPDATE查询,以便“联系”'可以使用'联系人'设置新记录中的字段。旧记录中的字段。我当前的SELECT语句如下;

SELECT *
FROM Config ta1
JOIN Config ta2 on ta1.Config_ID != ta2.Config_ID
WHERE ta1.Serial_Number = ta2.Serial_Number AND 
(ta1.Serial_Number is not null OR ta1.Serial_Number = ' ') AND
ta1.Config_Name != ta2.Config_Name

任何帮助都会非常感激,我一直在这里挖掘,但没有太多的运气。

1 个答案:

答案 0 :(得分:0)

ta1是新记录,ta2是旧记录,对吗?要更新的列的名称是Contact?这应该适用:

UPDATE Config
SET Contact = ta2.Contact
FROM Config ta1
JOIN Config ta2 on ta1.Config_ID != ta2.Config_ID
WHERE ta1.Serial_Number = ta2.Serial_Number AND 
(ta1.Serial_Number is not null OR ta1.Serial_Number = ' ') AND
ta1.Config_Name != ta2.Config_Name

可能希望将它包装在BEGIN / ROLLBACK结构中,并在事务中的UPDATE之后添加一个SELECT,以确保你得到你想要的东西,但是应该这样做。