http://blog.csdn.net/netcoder/archive/2004/10/22/147369.aspx

解决方案 »

  1.   

    在发布项目属性的"命令"中,选择:
    用该存储过程调用替换 INSERT 命令然后在订阅服务器中去修改对应的处理存储过程,加上set identity_insert选项
      

  2.   

    初始化架构之后Auto_ID就不是主键和标识列了,就不会自增了。
    这样会让我的程序发生混乱的啊。能不能不去掉主键和标志列?
      

  3.   

    在sp4中,有如下说明,似乎能解决这个问题,但我没有测试出来
    5.2.20 用于复制事务发布中标识列的新架构选项
    在 SP4 中引入在以前的版本中,事务发布中的标识列作为基本数据类型(例如 int)进行复制,而不设置标识属性。此方法适合不允许在订阅服务器上进行插入的应用程序。SQL Server 2000 SP4 为事务发布引入了一个新的架构选项 (0x4),用于将标识列作为一个标识列进行复制。这在许多情况下都适用,包括双向复制以及使用订阅服务器作为备用服务器。在上述情况下,可能会在订阅服务器上进行插入,而插入会使标识列增加。指定标识列应作为一个标识列复制: 在发布服务器上创建表时,为标识列指定 NOT FOR REPLICATION 选项。这样可以确保只有用户插入会使标识列增加,复制代理程序插入不会增加标识列。有关更多信息,请参见 SQL Server 联机丛书中的“CREATE TABLE”。
    在添加包含标识列的项目时,应为 sp_addarticle 的 @schema_option 参数设置 0x4 选项。有关此参数的更多信息,请参见 SQL Server 联机丛书中的“sp_addarticle”。
    初始化订阅服务器之后,对每个包含标识列的表执行 DBCC CHECKIDENT。这样可以为在订阅服务器的标识列中的插入指定起始值,使插入的值不会与发布服务器上已插入的值相同。例如,可以指定在订阅服务器上的插入应从 1,000,000 开始: 
    USE Northwind
    GO
    DBCC CHECKIDENT ('Employees', RESEED, 1000000)
    GO
    有关更多信息,请参见 SQL Server 联机丛书中的 DBCC CHECKIDENT。