1

我正在尝试更新一个表,以便添加缺少的行,并使用来自不同数据库的另一个表的信息作为参考来更新不是最新的行。

但是,有些表有主键,有些则没有。如果有主键插入命令将不会运行,如果没有主键,行将重复。

有没有办法让插入命令跳过已经存在的主键值?

我正在使用 sql server management studio 2005,这是迄今为止我为具有主键(PKcolumn)的表所拥有的代码:

INSERT [testDB].[dbo].[table1]
SELECT * FROM [sourceDB].[dbo].[table1]

UPDATE test
SET 
 test.[PKcolumn] = source.[PKcolumn]
,test.[column2] = source.[column2]
,test.[column3] = source.[column3] 
FROM 
[sourceDB].[dbo].[sourceDB] AS source
INNER JOIN 
[testDB].[dbo].[PKcolumn] AS test
ON source.[PKcolumn] = test.[PKcolumn]

更新工作完美,但即使有一个重复项,插入也根本不会运行。

有关如何使此代码工作的任何建议?

另外,在没有主键的表上做同样事情的任何提示?

4

1 回答 1

2

您需要使用 LEFT OUTER JOIN 在 INSERT 查询中排除表中已经存在的行:

INSERT [testDB].[dbo].[table1]
SELECT * FROM [sourceDB].[dbo].[table1]
LEFT OUTER JOIN [testDB].[dbo].[table1] ON [sourceDB].[dbo].[table1].[PKcolumn] = [testDB].[dbo].[table1].[PKcolumn]
WHERE [testDB].[dbo].[table1].[PKcolumn] IS NULL

对于没有主键的表,我想您需要加入所有列以避免重复。

于 2012-07-31T15:57:05.260 回答