|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
闪回的目的是要让数据库在commit之后,还能恢复到之前的某个状态,整库或指定的表。自增列默许是不克不及拔出显式值的,当我们试图给自增列拔出值时,会报以下毛病:
当IDENTITY_INSERT设置为OFF时,不克不及为表table1中的标识列拔出显式值。
假如我们想为表的自增列拔出显式值,我们能够经由过程SETIDENTITY_INSERT语法来完成,这在数据转移的时分尤其无效。
我们先看看IDENTITY_INSERT的语法。
感化:同意将显式值拔出表的标识列中。
语法:SETIDENTITY_INSERT[database_name.[schema_name].]table{ON|OFF}
参数:
database_name
指定的表地点的数据库的称号。
schema_name
表所属的架构的称号。
table
包括标识列的表的称号。
备注:
任什么时候候,一个会话中只要一个表的IDENTITY_INSERT属性能够设置为ON。假如某个表已将此属性设置为ON,则对另外一个表收回SETIDENTITY_INSERTON语句时,SQLServer2005将前往一个毛病信息,指出SETIDENTITY_INSERT已设置为ON,并呈报已将其属性设置为ON的表。
假如拔出值年夜于表确当前标识值,则SQLServer主动将新拔出值作为以后标识值利用。
SETIDENTITY_INSERT的设置是在实行或运转时设置的,而不是在剖析时设置的。
示例:
我们先创立一个带有自增列的表:
createtablehr_member(IDintidentity(1,1)primarykey,namevarchar(100))
然后我们实验往该表拔出数据:
insertintohr_member(id,name)values(1,wfs)
会报以下的毛病:
当IDENTITY_INSERT设置为OFF时,不克不及为表hr_member中的标识列拔出显式值。
设置identity_insert的值后再拔出数据:
setidentity_inserthr_memberon
insertintohr_member(id,name)values(1,wfs)
实行乐成!
注重:在统一个会话中,只能有一个表的identity_insert能够设置为ON。
我们再创立另外一个表:
createtablehr_member_1(IDintidentity(1,1)primarykey,namevarchar(100))
然后实行:
setidentity_inserthr_memberon
setidentity_inserthr_member_1on
会报以下的毛病:
表test.dbo.hr_member的IDENTITY_INSERT已为ON。没法为表hr_member_1实行SET操纵。
修正代码:
setidentity_inserthr_memberoff
setidentity_inserthr_member_1on
实行乐成!
注重:我们在在对标识列实行拔出操纵时,必定要列出此标识列的列名:
以下代码:
setidentity_inserthr_memberon
insertintohr_member
select2,abc
会报以下毛病:
仅当利用了列列表而且IDENTITY_INSERT为ON时,才干为表hr_member中的标识列指定显式值。
修正代码:
setidentity_inserthr_memberon
insertintohr_member(ID,name)
select2,abc
实行乐成!
注重:任何setidentity_insert表名on的设置,都只在以后会话中无效!
会话的界说,请参考本站猎取sqlserver中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区分中对sql会话的注释对于insert和delete,event中包含了插入/删除的记录的所有字段的值(太爽了。。) |
|