您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)SQL SERVER中怎么實現(xiàn)自增列,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
declare @Table_name varchar(60)
set @Table_name = '';
if Exists(Select top 1 1 from sysobjects Where objectproperty(id, 'TableHasIdentity') = 1 and upper(name) = upper(@Table_name) ) select 1else select 0
-- or
if Exists(Select top 1 1 from sysobjects so Where so.xtype = 'U' and upper(so.name) = upper(@Table_name) and Exists(Select Top 1 1 from syscolumns sc Where sc.id = so.id and columnproperty(sc.id, sc.name, 'IsIdentity') = 1 ) ) select 1else select 0
判斷Table是否存在自增列(Identity column),并查出自增列相關(guān)數(shù)據(jù):
declare @Table_name varchar(60)set @Table_name = '';
declare @Table_name varchar(60)set @Table_name = 'zy_cost_list';Select so.name Table_name, --表名字 sc.name Iden_Column_name, --自增字段名字 ident_current(so.name) curr_value, --自增字段當(dāng)前值 ident_incr(so.name) incr_value, --自增字段增長值 ident_seed(so.name) seed_value --自增字段種子值 from sysobjects so Inner Join syscolumns sc on so.id = sc.id and columnproperty(sc.id, sc.name, 'IsIdentity') = 1Where upper(so.name) = upper(@Table_name)
資料引用:
檢查指定表的當(dāng)前標(biāo)識值,如有必要,還對標(biāo)識值進行更正。
DBCC CHECKIDENT( 'table_name'[ , { NORESEED| { RESEED [ , new_reseed_value ] } } ] )
'table_name'
是要對其當(dāng)前標(biāo)識值進行檢查的表名。表名必須符合標(biāo)識符規(guī)則。有關(guān)更多信息,請參見使用標(biāo)識符。指定的表必須包含標(biāo)識列。
NORESEED
指定不應(yīng)更正當(dāng)前標(biāo)識值。
RESEED
指定應(yīng)該更正當(dāng)前標(biāo)識值。
new_reseed_value
是在標(biāo)識列中重新賦值時要使用的值。
如有必要,DBCC CHECKIDENT 會更正列的當(dāng)前標(biāo)識值。然而,如果標(biāo)識列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 語句中)創(chuàng)建的,則不更正當(dāng)前標(biāo)識值。
如果標(biāo)識列上有主鍵或唯一鍵約束,無效標(biāo)識信息可能會導(dǎo)致錯誤信息 2627。
對當(dāng)前標(biāo)識值所做的具體更正取決于參數(shù)規(guī)范。
DBCC CHECKIDENT ('table_name', NORESEED)不重置當(dāng)前標(biāo)識值。DBCC CHECKIDENT 返回一個報表,它指明當(dāng)前標(biāo)識值和應(yīng)有的標(biāo)識值。DBCC CHECKIDENT ('table_name') 或DBCC CHECKIDENT ('table_name', RESEED)如果表的當(dāng)前標(biāo)識值小于列中存儲的最大標(biāo)識值,則使用標(biāo)識列中的最大值對其進行重置。DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value)當(dāng)前值設(shè)置為 new_reseed_value。如果自創(chuàng)建表后沒有將行插入該表,則在執(zhí)行 DBCC CHECKIDENT 后插入的第一行將使用 new_reseed_value 作為標(biāo)識。否則,下一個插入的行將使用 new_reseed_value + 1。如果 new_reseed_value 的值小于標(biāo)識列中的最大值,以后引用該表時將產(chǎn)生 2627 號錯誤信息。
當(dāng)前標(biāo)識值可以大于表中的最大值。在此情況下,DBCC CHECKIDENT 并不自動重置當(dāng)前標(biāo)識值。若要在當(dāng)前標(biāo)識值大于列中的最大值時對當(dāng)前標(biāo)識值進行重置,請使用兩種方法中的任意一種:
執(zhí)行 DBCC CHECKIDENT (
, NORESEED) 以確定列中的當(dāng)前最大值,然后使用 DBCC CHECKIDENT (
, RESEED,
) 語句將該值指定為
。將
置為很小值來執(zhí)行 DBCC CHECKIDENT (
, RESEED,
),然后運行 DBCC CHECKIDENT (
, RESEED)。
不管是否指定任何選項(針對于包含標(biāo)識列的表;下例使用 pubs 數(shù)據(jù)庫的 jobs 表),DBCC CHECKIDENT 返回以下結(jié)果集(值可能會有變化):
Checking identity information: current identity value '14', current column value '14'.DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKIDENT 權(quán)限默認(rèn)授予表所有者、sysadmin 固定服務(wù)器角色和 db_owner 固定數(shù)據(jù)庫角色的成員且不可轉(zhuǎn)讓。
下例在必要的情況下重置 jobs 表的當(dāng)前標(biāo)識值。
USE pubsGODBCC CHECKIDENT (jobs)GO
下例報告 jobs 表中的當(dāng)前標(biāo)識值;如果該標(biāo)識值不正確,并不對其進行更正。
USE pubsGODBCC CHECKIDENT (jobs, NORESEED)GO
下例強制 jobs 表中的當(dāng)前標(biāo)識值為 30。
USE pubsGODBCC CHECKIDENT (jobs, RESEED, 30)GO
上述就是小編為大家分享的SQL SERVER中怎么實現(xiàn)自增列了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。