我在表格中有一个id
andabbreviation
列。我想abbreviation
在另一个服务器上更新另一个数据库中的列。我知道如何获取 SQL 选择语句,但是如何从中获取在另一个数据库上运行的 UPDATE 语句?
基本上我想得到类似的东西:
UPDATE table SET abbrv=x WHERE id=1;
UPDATE table SET abbrv=y WHERE id=2;
...
我该怎么做?
一个简单的方法是创建一个 SELECT 语句来生成 UPDATE 语句:
SELECT
CONCAT('UPDATE home_provider SET abbrv="', abbrv, '" WHERE id=', id, ';')
FROM home_provider
这会给你:
UPDATE home_provider SET abrv="ACA" WHERE id=1;
UPDATE home_provider SET abrv="ALL" WHERE id=2;
UPDATE home_provider SET abrv="ARK" WHERE id=3;
UPDATE home_provider SET abrv="ART" WHERE id=4;
...
假设两个数据库之间存在信任关系,您可以使用连接进行更新:
UPDATE target
SET target.abbrv = source.abbrv
FROM db1.dbo.table1 target
INNER JOIN db2.dbo.table1 source ON target.id = source.id
在上面的示例中,db1 是目标数据库(更新信息的地方),而 db2 是源数据库(从中复制数据的地方),当然需要更改 table1 以反映表的实际名称。
如果需要,您还可以包含 where 子句。
UPDATE target
SET target.abbrv = source.abbrv
FROM db1.dbo.table1 target
INNER JOIN db2.dbo.table1 source ON target.id = source.id
WHERE target.id in (1,2,3,5)
如果数据库位于不同的服务器上:
UPDATE target
SET target.abbrv = source.abbrv
FROM servara.db1.dbo.table1 target
INNER JOIN serverb.db2.dbo.table1 source ON target.id = source.id