您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页SQLSERVER自增列的方法

SQLSERVER自增列的方法

来源:华佗小知识
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)。 结果集

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务