我在不同的服务器上有两个数据库,它们的表名为dbo.A
。数据两者在很大程度上是相同的,但我想确保两个表具有相同的数据。我一直在使用SQL Server 2016年6月将数据从一个表导出到另一个表,但是我得到的错误是:将数据插入到可能有重复数据的SQL Server数据库中
违反PRIMARY KEY约束''。不能在对象中插入重复键一个
重复的键值为“在这里写一些文字”
我知道我可以删除该表并重新插入行,但这是繁琐和非常糟糕的做法。什么是我更新第二个数据库中数据的最佳方式?
我在不同的服务器上有两个数据库,它们的表名为dbo.A
。数据两者在很大程度上是相同的,但我想确保两个表具有相同的数据。我一直在使用SQL Server 2016年6月将数据从一个表导出到另一个表,但是我得到的错误是:将数据插入到可能有重复数据的SQL Server数据库中
违反PRIMARY KEY约束''。不能在对象中插入重复键一个
重复的键值为“在这里写一些文字”
我知道我可以删除该表并重新插入行,但这是繁琐和非常糟糕的做法。什么是我更新第二个数据库中数据的最佳方式?
将服务器添加为您的链接服务器并使用以下语句。
要在表A的发言权添加行即成B的表A.
INSERT INTO dbo.A (Col1 , Col2 , Col3 , ....)
SELECT Col1 , Col2 , Col3 , ....
FROM [LinkedServerB].[DBName].[dbo].[A] A
WHERE NOT EXISTS (SELECT 1 FROM dbo.A
WHERE A.PK_Column = PK_Column)
然后用服务器B上相同的查询到从服务器A中添加的行
为了从TableA中添加行的发言权服务B的表A.
INSERT INTO dbo.A (Col1 , Col2 , Col3 , ....)
SELECT Col1 , Col2 , Col3 , ....
FROM [LinkedServerA].[DBName].[dbo].[A] A
WHERE NOT EXISTS (SELECT 1 FROM dbo.A
WHERE A.PK_Column = PK_Column)
好吧,如果你不能使用链接的服务器,你可以将数据复制到一个空的临时表。然后运行类似的插入语句,但使用临时表而不是链接表
由于我没有顶级权限,所以没有给予我权限。有没有办法做到这一点,而无需链接服务器? – megadarkfriend
在具有相同结构的两台服务器中创建'dbo.A'的副本,减去PK列的PRIMARY KEY约束,例如在名为'dbo.A_Stage'的表中。现在执行与两台服务器相同的输出,但指向登台表'dbo.A_Stage'。然后,修改Ali的查询'FROM [LinkedServerA]。[DBName]。[dbo]。[A] A'到'FROM [dbo]。[A_Stage] A'〜这样数据首先被导出到彼此的一边,插入是在本地完成的。在每个服务器脚本的末尾添加'TRUNCATE TABLE dbo.A_Stage',或者如果您没有权限,则应清除'DELETE FROM dbo.A_Stage'。 – RDJ