1. 當(dāng)表中存儲(chǔ)有大量的數(shù)據(jù)情況下,修改表的主鍵,并設(shè)置標(biāo)識(shí)列的方法。
--
給已經(jīng)存在的字段
Id
添加主鍵約束
ALTER TABLE
表名
ADD
列名
int identity(1,1) primary key
alter table 表名
add constraint pk_id primary key (id);
設(shè)置標(biāo)示列的數(shù)據(jù):
A
:有數(shù)據(jù)的話
ALTER TABLE
表
ADD
編號(hào)
1 bigint identity(1,1) not null
go
SET IDENTITY_INSERT
表
ON
go
update
表
set
編號(hào)
1=
編號(hào)
go
SET IDENTITY_INSERT
表
OFF
go
ALTER TABLE
表
DROP COLUMN
編號(hào)
go
exec sp_rename
表
.
編號(hào)
1,
編號(hào)
go
B
:無(wú)數(shù)據(jù):
ALTER TABLE
表
ADD
編號(hào)
1 bigint identity(1,1) not null
go
ALTER TABLE
表
DROP COLUMN
編號(hào)
go
exec sp_rename
表
.
編號(hào)
1,
編號(hào)
go
自增長(zhǎng)的表示列的序號(hào)的值的修改。
SQLServer
數(shù)據(jù)庫(kù)自增長(zhǎng)標(biāo)識(shí)列的更新修改操作方法(轉(zhuǎn)載)
在日常的sql server開(kāi)發(fā)中,經(jīng)常會(huì)用到Identity類型的標(biāo)識(shí)列作為一個(gè)表結(jié)構(gòu)的自增長(zhǎng)編號(hào)。比如文章編號(hào)、記錄序號(hào)等等。自增長(zhǎng)的標(biāo)識(shí)列的引用很大程度上方便了數(shù)據(jù)庫(kù)程序的開(kāi)發(fā),但是有時(shí)這個(gè)固執(zhí)的字段類型也會(huì)帶來(lái)一些麻煩。
一、修改標(biāo)識(shí)列字段的值:(在執(zhí)行insert時(shí),將ID手動(dòng)的 設(shè)置成想要的值)
有時(shí),為了實(shí)現(xiàn)某個(gè)功能,需要修改類型為Identity自增長(zhǎng)類型的字段的值,但由于標(biāo)識(shí)的類型所限,這種操作默認(rèn)是不允許的。比如,目前數(shù)據(jù)庫(kù)有10 條正常記錄,引時(shí)刪除5條,那么如果再添加數(shù)據(jù)時(shí),自增長(zhǎng)的標(biāo)識(shí)列會(huì)自動(dòng)賦值為11,可這時(shí)如果想在插入數(shù)據(jù)時(shí)給賦值6呢,默認(rèn)是不允許的。如果說(shuō)想改變 主鍵標(biāo)識(shí)符的值,完全由自已控制標(biāo)識(shí)字段的插入,方法是有的,如下:
SET IDENTITY_INSERT [TABLE][ON|OFF]
使 用上述語(yǔ)句,可以方便的控制某個(gè)表的某個(gè)自增長(zhǎng)標(biāo)識(shí)列是否自動(dòng)增長(zhǎng),也就是說(shuō)是否允許你在inert一條記錄時(shí)手動(dòng)指定主鍵標(biāo)識(shí)列字段的值。
如果指定為ON,則可以insert時(shí)指定主鍵標(biāo)識(shí)字段的值,該值不自動(dòng)增長(zhǎng)。如果使用完畢,還需使用這個(gè)語(yǔ)句將開(kāi)關(guān)關(guān)閉到默認(rèn)狀態(tài)OFF,不然下次 insert數(shù)據(jù)時(shí)該字段還是不會(huì)自動(dòng)增長(zhǎng),要做到有始有終嘛。只是每次插入時(shí)都要手動(dòng)的設(shè)置一個(gè)主鍵值,示列如下:
set identity_insert? question_title on?? //開(kāi)啟手動(dòng)設(shè)置
insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello');? //手動(dòng)的向數(shù)據(jù)庫(kù)插入數(shù)據(jù)
二、重置標(biāo)識(shí)列字段值:
當(dāng)數(shù)據(jù)記錄被刪除一部分后,后面再添加的新數(shù)據(jù)記錄,標(biāo)識(shí)列數(shù)值會(huì)有很大的空閑間隔,看上去不是很爽。即使你刪除表中全部記錄,identity標(biāo)識(shí)列的 值還是會(huì)無(wú)何止的自動(dòng)增加變大,而不是從頭開(kāi)始增長(zhǎng)。通過(guò)下面這條語(yǔ)句可以重置自增長(zhǎng)字段的值:
DBCC CHECKIDENT(TABLE,[RESEED|NORESEED],[1])
上述語(yǔ)句把指定表的ID值(種子值)強(qiáng)制重設(shè)為1。然而,如果你不想將ID重設(shè)為1,你可以用你想用的ID值(種子值)替代第三個(gè)參數(shù)。如果你想知道當(dāng)前的ID值(種子值),而不想重設(shè)標(biāo)識(shí)種子,這時(shí)你就要用NORESEED,而不用再去設(shè)置第三個(gè)參數(shù)。
DBCC checkident(question_title,reseed,1)
insert into question_title (f_valid,f_questionTitle) values(5,'hello');
?
如果將表中記錄都刪除后,執(zhí)行上面的一句話,這時(shí)ID的自增長(zhǎng)值已被重設(shè),再insert插入記錄到數(shù)據(jù)庫(kù)時(shí),ID就可以從設(shè)置的1開(kāi)始,以后每次插入的 記錄還是自動(dòng)增長(zhǎng)。
執(zhí)行成功后提示如下:
--檢查標(biāo)識(shí)信息: 當(dāng)前標(biāo)識(shí)值 '9',當(dāng)前列值 '1'。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
說(shuō)明:以上顯示數(shù)據(jù)庫(kù)某表中當(dāng)前ID最大值為9,當(dāng)前設(shè)置的ID值為1。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
