我想从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。
主要密钥违规告诉您,customer_key
中A.table
中B.Table
的至少一个值已经用于A
中的其他客户记录(假设您已经运行了删除语句)为此customer_code
)。
这意味着考虑试图保持代理身份列customer_key
在两个表A和B之间保持同步已经太晚了(正如你所说,你不能截断A
并从B
从头开始复制,如果适用的话)。但是,似乎customer_code
不提供客户的唯一标识(幂等)(因为删除删除了10行)。
总而言之 - 如果您不需要通过customer_code
建立任何链接,并且可能通过customer_name
,您可以将数据复制到A
,这将被分配新的身份customer_key
:
(即离开IDENTITY_INSERT
关闭)
insert into A.table(customer_code,custome_name)
select customer_code,customer_name
from B.table where customer_code='100'
否则,如果确实需要唯一标识表之间的行,则需要为2个表之间的链接添加新存储。快速而肮脏的方法是将B的代理直接添加到A,如下所示:
ALTER TABLE A.table ADD customer_key_TableB INT NULL -- Or whatever the type of `customer_key`
GO
然后像这样插入和链接数据(再次,表格A的IDENTITY INSERT
仍然关闭):
insert into A.table(customer_code, customer_name, customer_key_TableB)
select customer_code, customer_name, customer_key
from B.table where customer_code='100'