• SQL Server数据库表重置自增主键号(通常是指ID)


    使用DBCC CHECKIDENT可以重新设置在使用中的表的标识列的起始值;
    如在删除表中的所有记录,需要让标识列从1开始时可以在查询分析器中执行:DBCC CHECKIDENT(TableName,RESEED,0);该语句的使用方法如下: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。如果表创建后未插入任何行,或者使用 TRUNCATE TABLE 语句删除了所有行,则您运行 DBCC CHECKIDENT 之后插入的第一行使用new_reseed_value作为标识。否则,插入的下一行将使用new_reseed_value+ 当前增量值。
    
    如果该表不为空,那么将标识值设置为小于标识列中的最大值的数字时,将会出现下列情况之一:
    
        如果标识列中存在 PRIMARY KEY 或 UNIQUE 约束,则随后在表中执行插入操作时将生成错误消息 2627,原因是生成的标识值将与现有值冲突。
        如果不存在 PRIMARY KEY 或 UNIQUE 约束,则随后的插入操作将产生重复的标识值。
    
    
    异常
    
    下面列出了 DBCC CHECKIDENT 不自动重置当前标识值时的条件,并提供了重置该值的方法。
    
    当前标识值可以大于表中的最大值。在此情况下,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)。
    
    当删除表中的所有行时。在此情况下,DBCC CHECKIDENT 并不自动重置当前标识值。若要在删除表中所有行时对当前标识值进行重置,请使用下面这种方法:
    
        执行 DBCC CHECKIDENT (table_name,RESEED,new_reseed_value),并将new_reseed_value设置为所需的起始值。
    
     
    结果集
    
    无论是否为包含标识列的表指定了任何选项,DBCC CHECKIDENT 都返回以下信息(返回值可能有所不同):
    Checking identity information: current identity value '290', current column value '290'.
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.权限
    
    DBCC CHECKIDENT 权限默认授予表所有者、sysadmin固定服务器角色和db_owner固定数据库角色的成员且不可转让。
    示例A. 根据需要重置当前标识值
    
    以下示例根据需要重置 AdventureWorks 数据库中 Employee 表的当前标识值。
    USE AdventureWorks;
    GO
    DBCC CHECKIDENT ("HumanResources.Employee");
    GOB. 报告当前标识值
    
    以下示例报告 AdventureWorks 数据库的 Employee 表中的当前标识值,但如果该标识值不正确,不会进行更正。
    USE AdventureWorks;
    GO
    DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
    GOC. 将当前标识值强制设置为 30
    
    以下示例将 Employee 表中 EmployeeID 列中的当前标识值强制设置为值 30。由于该表具有现有行,因此插入的下一行将使用 31 作为值,即,当前标识值加 1(1 是为该列定义的当前增量值)。
    USE AdventureWorks;
    GO
    DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
    GO
    
  • 相关阅读:
    IBM Minus One(water)
    约瑟夫问题的循环链表实现
    双向链表(差不多)
    单向链表的建立,插入,删除(复习一下)
    找新朋友(欧拉函数)
    验证角谷猜想(hd1279)
    Wolf and Rabbit(gcd)
    Big Number(大数)
    字串数(高精度组合数)
    寻找素数对(hd1262)
  • 原文地址:https://www.cnblogs.com/hyqing/p/3704061.html
Copyright © 2020-2023  润新知