SQL违反主键约束复制

时间:2015-09-01 14:25:24

标签: sql-server-2008 sql-server-2012 database-replication

我正在尝试在sql server 2008到2012之间进行复制 我在2008服务器之间完成了这项工作并且完美运行

现在,当我将发布类型设置为快照,并将其作为从分发服务器推送到订阅服务器时,我收到错误

  

违反PRIMARY KEY约束'PK__tableF__4EBD61D204E4BC85'。无法在对象'dbo.table'中插入重复键。重复键值为(0)。 (来源:MSSQLServer,Numérod'erreur:2627)   Obtenir de l'aide:http://help/2627

即使我只选择了一个要复制的表,我总是遇到同样的问题,但是创建了数据库的模式,但表中没有数据 我试图恢复表,但它不起作用。 请问我该怎么办? 感谢

1 个答案:

答案 0 :(得分:0)

我总是遇到这个问题 我试着写一个脚本而不是使用wisard

    DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @frequency_type as int;
DECLARE @subscriber_security_mode as int;
DECLARE @subscriber_login AS sysname;
DECLARE @subscriber_password AS sysname;

SET @publication = N'8-9' ;
SET @subscriber =N'APPLI-SERV-EXT';
SET @subscriptionDB = N'89' ; 
SET @subscriber_security_mode= 1; 
SET @subscriber_login=N'xxx'; 
SET @subscriber_password=N'xxxx'; 

--Add a push subscription to a transactional publication.
USE [DBName]

EXEC sp_addsubscription 
@publication = @publication, 
@subscriber = @subscriber, 
@destination_db = @subscriptionDB, 
@subscription_type = N'push';

EXEC sp_addpushsubscription_agent 
@publication = @publication, 
@subscriber = @subscriber, 
@subscriber_db = @subscriptionDB, 
@subscriber_security_mode=@subscriber_security_mode,
@subscriber_login=@subscriber_login,
@subscriber_password=@subscriber_password,
@frequency_type = @frequency_type,
@job_login = N'xxxx', 
@job_password = N'xxx';
GO

执行时我收到警告"警告:分发代理的工作是隐式创建的,并且将在SQL Server代理的服务帐户下运行。"

如果我检查订阅者,我发现模式已被复制,而在表中有一个418行,我有4012并且表是空的,除了一个非null属性为0 这是表格的脚本

    USE [test]
GO

    /****** Object:  Table [dbo].[clientEssai]    Script Date: 15/09/2015 15:13:44 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    CREATE TABLE [dbo].[clientEssai](
        [client_id] [int] NOT NULL,
        [client_name] [varchar](255) NULL,
        [contact_name] [varchar](255) NULL,
        [tel] [varchar](255) NULL,
        [gsm] [varchar](255) NULL,
        [email] [varchar](255) NULL,
        [adress] [varchar](255) NULL,
        [registration_date] [date] NULL
    ) ON [PRIMARY]

    GO

    SET ANSI_PADDING OFF
    GO

P.S:我只选择了一篇要复制的文章,即ClientEssai表 出版商和经销商是2008年的实例 订阅者2012 我正在推动 我和代理商使用相同的帐户 是否有特定的配置要做? 谢谢