SQLSERVER⾃增列的⽅法
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),并查出⾃增列相关数据: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
检查指定表的当前标识值,如有必要,还对标识值进⾏更正。语法
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 语句所做的标识更正
DBCC CHECKIDENT ('table_name', NORESEED)
不重置当前标识值。DBCC CHECKIDENT 返回⼀个报表,它指明当前标识值和应有的标识值。DBCC CHECKIDENT ('table_name') 或
DBCC CHECKIDENT ('table_name', RESEED)
如果表的当前标识值⼩于列中存储的最⼤标识值,则使⽤标识列中的最⼤值对其进⾏重置。DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value)
当前值设置为 new_reseed_value。如果⾃创建表后没有将⾏插⼊该表,则在执⾏ DBCC CHECKIDENT 后插⼊的第⼀⾏将使⽤
new_reseed_value 作为标识。否则,下⼀个插⼊的⾏将使⽤ new_reseed_value + 1。如果 new_reseed_value 的值⼩于标识列中的最⼤值,以后引⽤该表时将产⽣ 2627 号错误信息。
当前标识值可以⼤于表中的最⼤值。在此情况下,DBCC CHECKIDENT 并不⾃动重置当前标识值。若要在当前标识值⼤于列中的最⼤值时对当前标识值进⾏重置,请使⽤两种⽅法中的任意⼀种:
执⾏ DBCC CHECKIDENT ('table_name', NORESEED) 以确定列中的当前最⼤值,然后使⽤ DBCC CHECKIDENT ('table_name',RESEED, new_reseed_value) 语句将该值指定为 new_reseed_value。
将 new_reseed_value 置为很⼩值来执⾏ DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value),然后运⾏ DBCCCHECKIDENT ('table_name', RESEED)。 结果集