SET IDENTITY INSERT 學習心得

2021-09-01 10:47:53 字數 3115 閱讀 1685

[color=indigo][/color][size=large]想要將值插入到自動編號(或者說是標識列,identity)中去,需要設定 set identity_insert

示例:1.首先建立乙個有標識列的表:

create table products (id int identity primary key, product varchar(40))

2.嘗試在表中做以下操作:

insert into products (id, product) values(3, 'garden shovel')

結果會導致錯誤:「當 identity_insert 設定為 off 時,不能向表 'products' 中的標識列插入顯式值。」

3.改用:

set identity_insert products on

insert into products (id, product) values(1, 'garden shovel')

返回正確。

4.建立另外乙個表products2,嘗試相同插入操作:

create table products2 (id int identity primary key, product varchar(40))

然後執行:

set identity_insert products2 on

insert into products2 (id, product) values(1, 'garden shovel')

導致錯誤:「表 'material.dbo.products' 的 identity_insert 已經為 on。無法對錶 'products2' 執行 set 操作。」

改為執行:

set identity_insert products off

set identity_insert products2 on

insert into products2 (id, product) values(2, 'garden shovel')

執行通過。

5.嘗試以下操作:

set identity_insert products2 on

insert into products2 select * from products

導致錯誤:「僅當使用了列的列表,並且 identity_insert 為 on 時,才能在表 'products2' 中為標識列指定顯式值。」

6.改為:

set identity_insert products2 on

insert into products2 (id, product) select * from products

執行通過。

總結:1.每一次連線會話中的任一時刻,只能對乙個表設定identity_insert on,且設定只對當前會話有效;

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

附:set identity_insert

允許將顯式值插入表的標識列中。

語法set identity_insert [ database.[ owner.] ]

引數database

是指定的表所駐留的資料庫名稱。

owner

是表所有者的名稱。

table

是含有標識列的表名。

注釋任何時候,會話中只有乙個表的 identity_insert 屬性可以設定為 on。如果某個表已將此屬性設定為 on,並且為另乙個表發出了 set identity_insert on 語句,則 microsoft® sql server™ 返回乙個錯誤資訊,指出 set identity_insert 已設定為 on 並報告此屬性已設定為 on 的表。

如果插入值大於表的當前標識值,則 sql server 自動將新插入值作為當前標識值使用。

set identity_insert 的設定是在執行或執行時設定,而不是在分析時設定。

許可權執行許可權預設授予 sysadmin 固定伺服器角色和 db_owner 及 db_ddladmin 固定資料庫角色以及物件所有者。

示例下例建立乙個含有標識列的表,並顯示如何使用 set identity_insert 設定填充由 delete 語句導致的標識值中的空隙。

-- create products table.

create table products (id int identity primary key, product varchar(40))

go-- inserting values into products table.

insert into products (product) values ('screwdriver')

insert into products (product) values ('hammer')

insert into products (product) values ('saw')

insert into products (product) values ('shovel')

go-- create a gap in the identity values.

delete products

where product = 'saw'

goselect *

from products

go-- attempt to insert an explicit id value of 3;

-- should return a warning.

insert into products (id, product) values(3, 'garden shovel')

go-- set identity_insert to on.

set identity_insert products on

go-- attempt to insert an explicit id value of 3

insert into products (id, product) values(3, 'garden shovel').

goselect *

from products

go-- drop products table.

drop table products

go[/size]

MVC Rounting System 學習心得

1.所有的routing 規則都存在routtable.routes這個全域性的collection當中 routeconfig.registerroutes routetable.routes 2.下面是具體的方法,將所有的routing規則註冊到全域性變數裡。public static void...

linux mount 與umount 學習心得

要將檔案系統掛載到我們的 linux 系統上,就要使用 mount 這個指令 用法 mount tonl 裝置名稱代號 掛載點 mount a 引數 a 依照 etc fstab 的內容將所有相關的磁碟都掛上來!n 一般來說,當我們掛載檔案系統到 linux 上頭時,linux 會主動的將 目前的 ...

心形函式 封心

這個是 html5實驗室 canvas世界 中的乙個例子,最大的收穫當然是心形函式 x 2 y 2 1 x 2 y 3 0。有了前面幾個動畫做鋪墊,這個還是比較容易就完成了,沒有遇到什麼奇特的問題。不過也因為比較輕鬆,的組織不是很認真,也不想去改了。值得一提的是這個動畫很容易另行發揮,我在除錯的過程...