set identity_insert 表名 on

set identity_insert testBak on|off用法

作用:testbak(id int identity(1,1) , char(10) name)
set identity_insert testBak on 使identity(1,1)自動設置序列無效,然後用戶就可以爲所欲爲插入需要的id值了。

1 創建一個含自增序列的表格

create  table   testIdentity(
id    int   identity(1,1),
name  char(10)
)

2 正常向表中插入一條數據

---id號會自動生成爲1,這裏只用顯示指出要插入的字段爲name  ,且name值爲'ming'
insert   into   testIdentity(name)  values('ming');

3 指定id值向表中插入數據

注意:這是錯誤的做法,identify(1,1)會自動生成id號,identify(1,1)和用戶指定id值二者會衝突

insert  into   testIdentity(id,name) values(9,'yue');
報錯:當 IDENTITY_INSERT 設置爲 OFF 時,不能爲表 'testIdentity' 中的標識列插入顯式值。
原因:此時已設定  id  爲identity(1,1)自動生成,不能再自己設置id的值了。
改正:
---讓identity(1,1) 設置失效
set     IDENTITY_INSERT    testIdentity  on
insert  into   testIdentity(id,name) values(9,'yue');
set     IDENTITY_INSERT    testIdentity  off
此時則插入成功。

4 備份該表

--創建空的備份表
select    *    into   testBak    from    testIdentity  where 1=0
--讓備份表的identity(1,1)設置無效
set   identity_insert  testBak  on
--顯示指出要複製的字段(id,name)
insert   into    testBak(id,name)   select   *    from   testIdentity
set   identity_insert  testBak off

5 其他注意事項:

(1)每一次連接會話中的任一時刻,只能對一個表設置IDENTITY_INSERT ON,且設置只對當前會話有效;

(2)set identity_insert testBak on set identity_insert testBak off 連用;

(3)在對標識列執行插入操作進,一定要顯示列出此標識列(當然,同時也就需要列出相關的其他列了)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章