第一次在这里问一个问题。为了给出一点背景知识,我们有一个包含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
任何帮助都会非常感激,我一直在这里挖掘,但没有太多的运气。
答案 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,以确保你得到你想要的东西,但是应该这样做。