Sql 在可能有主键也可能没有主键的表上插入行和更新行

Sql 在可能有主键也可能没有主键的表上插入行和更新行,sql,sql-server,database,primary-key,insert-update,Sql,Sql Server,Database,Primary Key,Insert Update,我正在尝试更新一个表,以便添加缺少的行,并使用不同数据库上另一个表中的信息作为引用来更新非最新的行 但是,有些表有主键,有些表没有主键。 如果有主键,insert命令将不会运行,如果没有主键,行将重复 有没有办法让insert命令跳过已经存在的主键值 我正在使用SQLServerManagementStudio 2005,以下是我到目前为止针对具有主键(PKcolumn)的表的代码: 更新工作正常,但即使有一个副本,插入也不会运行 关于如何使这段代码工作有什么建议吗 还有,在没有主键的表上执行相

我正在尝试更新一个表,以便添加缺少的行,并使用不同数据库上另一个表中的信息作为引用来更新非最新的行

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

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

我正在使用SQLServerManagementStudio 2005,以下是我到目前为止针对具有主键(PKcolumn)的表的代码:

更新工作正常,但即使有一个副本,插入也不会运行

关于如何使这段代码工作有什么建议吗


还有,在没有主键的表上执行相同操作的提示吗?

您需要使用左外联接排除插入查询中表中已经存在的行:

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

对于没有主键的表,我想您需要在所有列上进行联接以避免重复。

内部联接子句始终为true可能
source.[PKcolumn]=test.[PKcolumn]
这些表是否有任何列具有唯一约束或唯一索引?(
notnull UNIQUE
的行为类似于
PRIMARY KEY
;两者都唯一地标识所涉及的对象,并且都可以在外键引用中使用。)
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