【发布时间】:2012-07-31 15:51:55
【问题描述】:
我正在尝试更新一个表,以便使用来自不同数据库上的另一个表的信息作为参考来添加缺失的行并更新不是最新的行。
但是,有些表有主键,有些则没有。 如果有主键插入命令将不会运行,如果没有主键,行将重复。
有没有办法让插入命令跳过已经存在的主键值?
我正在使用 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]
更新工作完美,但即使有一个重复,插入也不会运行。
关于如何使这段代码工作的任何建议?
另外,在没有主键的表上执行相同操作的任何提示?
【问题讨论】:
-
内连接子句总是正确的,也许
source.[PKcolumn] = test.[PKcolumn] -
表是否有任何列具有唯一约束或唯一索引? (
NOT NULL UNIQUE的行为类似于PRIMARY KEY;两者都唯一标识有问题的事物,并且都可以在外键引用中使用。)
标签: sql sql-server database primary-key insert-update