zoukankan      html  css  js  c++  java
  • 当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。

      在创建事务复制时,很多时候不一定使用默认的快照进行初始化,而是使用备份还原初始化。而当对有标识列(即identity的自增列)的表进行复制的时候,使用备份还原初始化搭建起来的复制常常就会报错,即:当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值

      这个错误是在创建表的时候,有一项’标识规范‘中的’不用于复制‘默认为‘否’,所以在发布端数据库插入数据时就会导致,右键表,选择设计选项可以看到,如图

      当使用备份还原进行初始化,订阅端的这张表该选项也会默认为‘否’,因此就会报错。在不删除此复制的情况下,以下有几种方法可进行修改:

    1.  最简单的就是把订阅服务器上这张表的该选项修改为‘’即可;

    2.  既然这里这个选项是‘否’,那么在创建这个表的时候在标识列就可以加一句:not for replication,但是既然已经有该表并且为了此表配置了复制,那么就可以在订阅服务器上执行下面这句代码即可,

    use [database]
    go
    alter
    table [tablename] alter column [columnname] add not for replication

    3.  第三种方法需要对复制的原理有一定的了解,复制只会将配置了复制的表上的update,delete和insert操作所造成的数据变化传递过来,在订阅服务器上针对这张表会创建三个存储过程,分别为dbo.sp_MSupd_dbo表名、dbo.sp_MSdel_dbo表名、dbo.sp_MSins_dbo表名,用这三个存储过程对订阅表进行修改。那么因为identity的存在,identity_insert选项为OFF,而每一次的插入需要将identity_insert设置为ON才可以进行插入,所以我们可以直接将插入的这个存储过程(dbo.sp_MSins_dbo表名)进行修改,加上下面这句,就可以自动插入数据。

    set identity_insert [表名] on

  • 相关阅读:
    Ubuntu18.04查看ip地址
    使用Vmware克隆功能快速创建多台虚拟机
    使用Vmware快照功能对虚拟机进行备份还原
    安装Vmware并创建Ubuntu虚拟机
    使用vmware+Ubuntu搭建hadoop集群
    Gitee图床+PicGo+Typora便捷在博客中使用图片
    使用Gitee Pages+hugo免费搭建你的博客
    Scheduler的WaitRun存在卡死的问题
    使用OpenJDK进行Delphi Android开发
    citus
  • 原文地址:https://www.cnblogs.com/zx3212/p/5654037.html
Copyright © 2011-2022 走看看