Sql server 如何更新除SQL中的记录外的其他记录

Sql server 如何更新除SQL中的记录外的其他记录,sql-server,compare,Sql Server,Compare,我正在比较SQL中不同数据库的两个表(单向)。 我只想用这些差异更新第二个表。 比较部分给出了正确的结果,但我不知道如何在更新部分得到这些结果 -- The comparing part DB1 with DB2 WITH RecordsWithUpdates AS (SELECT DeviceID, DeviceName, DeviceNumber, Active FROM DB1.dbo.devices EXCEPT SELECT DeviceID, Devi

我正在比较SQL中不同数据库的两个表(单向)。 我只想用这些差异更新第二个表。 比较部分给出了正确的结果,但我不知道如何在更新部分得到这些结果

-- The comparing part DB1 with DB2
    WITH RecordsWithUpdates AS
    (SELECT DeviceID, DeviceName, DeviceNumber, Active FROM DB1.dbo.devices
    EXCEPT
    SELECT DeviceID, DeviceName, DeviceNumber, Active FROM DB2.dbo.devices
    )

    -- displaying the differences
    Select * from DB2.dbo.Devices
    WHERE DeviceID IN (SELECT DeviceID FROM RecordsWithUpdates)

    -- Updating then columns of DB2
    Update DB2.dbo.devices SET DeviceName = ?????, SET DeviceNumber = ??????, Active = ??????? 


代码部分与?????是它应该插入发现的差异的地方,但我无法让它工作。

我将通过
更新来解决这个问题。。。设置从…起JOIN
语法,如:

UPDATE 
    t2
SET 
    t2.DeviceName   = t1.DeviceName,
    t2.DeviceNumber = t1.DeviceNumber,
    t2.Active       = t1.Active
FROM 
    DB2.dbo.devices t2
    INNER JOIN DB1.dbo.devices t1 
        ON  t1.DeviceID = t2.DeviceID
        AND NOT (
            t1.DeviceName       = t2.DeviceName
            AND t1.DeviceNumber = t2.DeviceNumber
            AND t1.Active       = t2.Active 
        )

如果要同时插入尚未存在的记录,则可以使用
合并
语法:

MERGE DB2.dbo.devices t2 
USING DB1.dbo.devices t1 
ON (t1.DeviceID = t2.DeviceID)
WHEN MATCHED
    THEN UPDATE SET
        t2.DeviceName   = t1.DeviceName,
        t2.DeviceNumber = t1.DeviceNumber,
        t2.Active       = t1.Active
WHEN NOT MATCHED
    THEN INSERT(DeviceID, DeviceName, DeviceNumber, Active)
    VALUES (t1.DeviceID, t1.DeviceName, t1.DeviceNumber, t1.Active)
最后:如果要删除
t2
中存在但不在
t1
中的记录,只需将其添加到
合并
查询的末尾:

WHEN NOT MATCHED BY SOURCE
THEN DELETE;

表上的主键是什么?查看代码,我知道它不仅仅是
DeviceID
,否则
select
查询将永远不会返回任何内容。这将确定
更新的联接条件,否则您可能会在更新后出现多个不可区分的行。两个表上的主键都是DeviceID Hank GMB这适用于两个表中存在的DeviceID!但是,如果T1创建了一条新记录,但该记录在T1中并不存在,那么我如何更改代码以在T2中插入新行呢?@Karstieman:啊,好吧,这在你的问题中并不明显。我用一个使用
MERGE
的解决方案更新了我的答案。是的,非常感谢!!这正是我要找的。