zoukankan      html  css  js  c++  java
  • SET IDENTITY_INSERT详解

    声明:本博文摘自http://www.lmwlove.com/ac/ID500

    自增列默认是不能插入显式值的,当我们试图给自增列插入值时,会报以下错误:
    当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'table1' 中的标识列插入显式值。
    如果我们想为表的自增列插入显式值,我们可以通过SET IDENTITY_INSERT语法来实现,这在数据转移的时候尤为有效。
    我们先看看IDENTITY_INSERT的语法。

    作用:允许将显式值插入表的标识列中。
    语法:SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
    参数:
    database_name 
    指定的表所在的数据库的名称。
    schema_name 
    表所属的架构的名称。
    table 
    包含标识列的表的名称。
    备注:
    任何时候,一个会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,则对另一个表发出 SET IDENTITY_INSERT ON 语句时,SQL Server 2005 将返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON,并报告已将其属性设置为 ON 的表。
    如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。
    SET IDENTITY_INSERT 的设置是在执行或运行时设置的,而不是在分析时设置的。
    示例:
    我们先创建一个带有自增列的表:
    1 create table hr_member(ID int identity(1,1) primary key,name varchar(100))
    然后我们尝试往该表插入数据:
    1 insert into hr_member(id,name) values (1,'wfs')

    会报以下的错误:
    当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'hr_member' 中的标识列插入显式值。
    设置identity_insert的值后再插入数据:

    1 set identity_insert hr_member on
    2 insert into hr_member(id,name) values (1,'wfs')

    执行成功!
    注意:在同一个会话中,只能有一个表的identity_insert可以设置为ON。
    我们再创建另一个表:

    1 create table hr_member_1(ID int identity(1,1) primary key,name varchar(100))

    然后执行:

    1 set identity_insert hr_member on
    2 set identity_insert hr_member_1 on

    会报以下的错误:
    表 'test.dbo.hr_member' 的 IDENTITY_INSERT 已经为 ON。无法为表 'hr_member_1' 执行 SET 操作。
    修改代码:

    1 set identity_insert hr_member off
    2 set identity_insert hr_member_1 on

    执行成功!
    注意:我们在在对标识列执行插入操作时,一定要列出此标识列的列名:
    如下代码:

    1 set identity_insert hr_member on
    2 insert into hr_member
    3 select 2,'abc'

    会报以下错误:
    仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'hr_member'中的标识列指定显式值。
    修改代码:

    1 set identity_insert hr_member on
    2 insert into hr_member(ID,name)
    3 select 2,'abc'

    执行成功!

    注意:任何set identity_insert 表名 on的设置,都只在当前会话中有效!

  • 相关阅读:
    移动文件夹时,千万别直接移动系统文件夹,应该直接复制或者移动这个系统文件夹内的内容
    UIView的intrinsicContentSize方法,在按钮中重写
    Reveal v4(8796) 使用
    AppCode 2016.3 注册码
    BSD process name correspondlng to current thread: knernel_task Mac OS version Not yet set
    iOS 适配HTTPS
    [Graphics] UIColor created with component values far outside the expected range, Set a breakpoint on UIColorBreakForOutOfRangeColorComponents to debug. This message will only be logged once.
    SB中设置UITextField 无边框,真机上输入汉字聚焦时,文字 下沉
    TTTAttributedLabel 富文本小记
    iOS 应用数据存储的常用方式
  • 原文地址:https://www.cnblogs.com/njl041x/p/3443646.html
Copyright © 2011-2022 走看看