7
UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
    table2.col3 = table2.col3,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

请帮助我了解当有 9-10 行时如何实现 SET 子句,并且使用公共列名 SCRIPT_ID 以便将来可以再次使用脚本来更新同一个表。

这是表中的一个片段:

____     _____________   __________________  _____     _     _____
 999     EMS02075SVC     Host Controller     15099     3     60000 
1000     EMS02075SVC     DSM Controller      15099     1     60000 
1001     EMS02075WEB1    Application Server   4447     1     60000
4

1 回答 1

10

如果您的源表和目标表相同并且具有相同的 memberids(我假设它们是主键),这将起作用:

UPDATE destination 

SET destination.col1 = source.col1, 
destination.col2 = source.col2,
destination.col3 = source.col3,
...
FROM table1 AS source
JOIN table2 AS destination ON source.memberid = destination.memberid

如果您的源表和目标表相同,但您的源有目标缺少的新行(记录),则您需要一个选择性INSERT语句:

INSERT INTO table2 (
    col1,
    col2,
    col3,
    ...
) SELECT col1, col2, col3, ... 
FROM table1 
WHERE NOT EXISTS (
    SELECT memberid 
    FROM table2 
    WHERE table2.memberid = table1.memberid)

以上将只插入尚未在目标表中的记录。由于您使用的是 SQL Server 2008,因此您可以尝试使用MERGE应该处理这两种情况的语句以及您在一组代码中编写的任何其他内容。

于 2012-11-30T15:42:59.160 回答