如何根据来自数据库中另一个表的查询从1个数据库更新表中的记录

时间:2016-11-24 02:38:40

标签: sql sql-server tsql

我目前有2张桌子

数据库1总计:

lcustomerid    sbarcode    dtreplicated
----------------------------------------
NULL             1           NULL
NULL             2           NULL
NULL             3           NULL
1353             4           12/6/15

数据库2表:

lcustomerid     sbarcode     
-------------------------
12353             1
15353             2
53332             3
1353              4

我想做的是让数据库1表看起来像这样:

lcustomerid    sbarcode    dtreplicated
----------------------------------------
12353             1           NULL
15353             2           NULL
53332             3           NULL
1353              4           12/6/15

如果我运行此查询 - 我可以将两个数据库之间的链接放在一起。

SELECT     
    Customers.lCustomerID, Customers.sBarcode, Web.sBarcode AS WebBarcode
FROM
    Customers 
RIGHT OUTER JOIN
    database1.db1.dbo.customers AS Web ON Web.sBarcode = Customers.sBarcode
WHERE     
    (Web.lCustomerid IS NULL) AND (Web.dtReplicated = '1/1/1900')

如何根据条形码匹配的数据库2的结果更新数据库1中的lcustomerid。基于上面的查询,我将从数据库2运行查询(它被设置为链接服务器)。

3 个答案:

答案 0 :(得分:1)

只需使用join

update c
    set lcustomerid = cc.lcustomerid
    from database1.db1.dbo.customers c join
         Customers  cc
         on cc.barcode = c.barcode
    where lcustomerid is null;

答案 1 :(得分:0)

直接从table2更新table1

UPDATE database1.db1.dbo.customers  SET lcustomerid = cc.lcustomerid FROM Customers CC 
 WHERE cc.barcode = barcode AND lcustomerid is null;

答案 2 :(得分:0)

UPDATE db1 SET customer_id = a.customer_id 
FROM 
(
    SELECT COALESCE(db1.customer_id, db2.lcustomerid) 
    AS customer_id, db1.sbarcode, db1.dtreplicated 
    FROM db1 
    LEFT OUTER JOIN db2 ON db1.sbarcode = db2.sbarcode
) a