我想从B服务器的A服务器中的表中插入数据。
前:
select count(*) from A.table
-- 100 rows affected
delete from A.table where customer_code = '100'
-- 10 rows affected
select count(*) from B.table
-- 200 rows affected
select count(*) from B.table where customer_code='100'
-- 20 rows affected
both the tables have identity(1,1) and primary_key
insert into A.table(customer_key,customer_code,custome_name)
select customer_key,customer_code,custome_name
from B.table where customer_code='100'
- 违反PRIMARY KEY约束。无法在对象'A.table'中插入重复键。
我已经尝试了
SET IDENTITY_INSERT <> ON
DBCC CHECKIDENT(<>, RESEED,0)
我正在使用SQL Server 2005.
答案 0 :(得分:0)
主要密钥违规告诉您,您尝试从customer_key
插入的A.table
中B.Table
的至少一个值已用于其他客户在A
中记录(并假设您已经为此customer_code
运行了删除语句。)
这意味着考虑尝试在两个表A和B之间保持代理身份列customer_key
同步已经太晚了(正如你所说,你不能截断{{1}如果适用,从A
开始从头开始复制。但是,B
似乎没有提供客户的唯一标识(幂等)(因为删除删除了10行)。
总而言之 - 如果您不需要通过customer_code
建立任何链接,并且可能通过customer_code
建立链接,则可以将数据复制到customer_name
,这将被分配新身份A
:
(即离开customer_key
OFF)
IDENTITY_INSERT
否则,如果确实需要唯一标识表之间的行,则需要为2个表之间的链接添加新存储。一种快速而肮脏的方式是将B的代理直接添加到A中,如下所示:
insert into A.table(customer_code,custome_name)
select customer_code,customer_name
from B.table where customer_code='100'
然后插入并链接数据(同样,表{A} ALTER TABLE A.table ADD customer_key_TableB INT NULL -- Or whatever the type of `customer_key`
GO
仍然关闭):
IDENTITY INSERT