千家信息网

SQL SERVER中怎么实现自增列

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这期内容当中小编将会给大家带来有关SQL SERVER中怎么实现自增列,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。declare @Table_name varc
千家信息网最后更新 2026年10月31日SQL SERVER中怎么实现自增列

这期内容当中小编将会给大家带来有关SQL SERVER中怎么实现自增列,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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') = 1Where 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 ('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
  • ),然后运行 DBCC CHECKIDENT (

  • 'table_name'
  • , RESEED)。

  • 结果集

    不管是否指定任何选项(针对于包含标识列的表;下例使用 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 固定数据库角色的成员且不可转让。

    示例
    A. 如有必要,重置当前标识值

    下例在必要的情况下重置 jobs 表的当前标识值。

    USE pubsGODBCC CHECKIDENT (jobs)GO
    B. 报告当前标识值

    下例报告 jobs 表中的当前标识值;如果该标识值不正确,并不对其进行更正。

    USE pubsGODBCC CHECKIDENT (jobs, NORESEED)GO
    C. 强制当前标识值为 30

    下例强制 jobs 表中的当前标识值为 30。

    USE pubsGODBCC CHECKIDENT (jobs, RESEED, 30)GO

上述就是小编为大家分享的SQL SERVER中怎么实现自增列了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

标识 最大 最大值 必要 信息 字段 数据 内容 参数 名字 报告 数据库 更多 权限 标识符 结果 角色 语句 错误 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 上海喔噻互联网科技有限公司 广州为想互联网科技有限公司 关于新基建和互联网科技 互联网科技的英文 朗涯互联网科技 广州紫鲸互联网科技 互联网科技产品 互联网科技创新服务 成都铂石互联网科技做什么的 荆州市昕露互联网络科技有限公司 赶超互联网科技 微信多开 国大互联网教育科技有限公司工作 互联网在线教育科技创业 为客找房互联网科技公司怎么样 电子商务与互联网科技的关系 陕西云淼互联网科技公司 普陀区互联网教育科技管理办法 保山互联网科技靠谱吗 保山浩联互联网科技有限公司 国智互联网科技 未来的互联网科技 有木互联网科技 上海卓越科技 互联网 互联网科技生活的内容 顶级互联网科技成果有哪些 华夏恒生科技与互联网科技 本届互联网大会上的黑科技 河南商务圈互联网科技有限公司 承德科技产业互联网平台
0