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 1
else 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 1
else select 0
判斷Table是否存在自增列(Identity column),並查出自增列相關數據:
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, --自增字段當前值
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') = 1
Where upper(so.name) = upper(@Table_name)
資料引用:
檢查指定表的當前標識值,如有必要,還對標識值進行更正。
DBCC CHECKIDENT
( 'table_name'
[ , { NORESEED
| { RESEED [ , new_reseed_value ] }
}
]
)
'table_name'
是要對其當前標識值進行檢查的表名。表名必須符合標識符規則。有關更多信息,請參見使用標識符。指定的表必須包含標識列。
NORESEED
指定不應更正當前標識值。
RESEED
指定應該更正當前標識值。
new_reseed_value
是在標識列中重新賦值時要使用的值。
如有必要,DBCC CHECKIDENT 會更正列的當前標識值。然而,如果標識列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 語句中)創建的,則不更正當前標識值。
如果標識列上有主鍵或唯一鍵約束,無效標識信息可能會導致錯誤信息 2627。
對當前標識值所做的具體更正取決於參數規范。
當前標識值可以大於表中的最大值。在此情況下,DBCC CHECKIDENT 並不自動重置當前標識值。若要在當前標識值大於列中的最大值時對當前標識值進行重置,請使用兩種方法中的任意一種:
不管是否指定任何選項(針對於包含標識列的表;下例使用 pubs 數據庫的 jobs 表),DBCC CHECKIDENT 返回以下結果集(值可能會有變化):
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 權限默認授予表所有者、sysadmin 固定服務器角色和 db_owner 固定數據庫角色的成員且不可轉讓。
下例在必要的情況下重置 jobs 表的當前標識值。
USE pubs GO DBCC CHECKIDENT (jobs) GO
下例報告 jobs 表中的當前標識值;如果該標識值不正確,並不對其進行更正。
USE pubs GO DBCC CHECKIDENT (jobs, NORESEED) GO
下例強制 jobs 表中的當前標識值為 30。
USE pubs GO DBCC CHECKIDENT (jobs, RESEED, 30) GO