以文本方式查看主题

-  智睿软件_技术交流论坛  (http://zhirui.net/bbs/index.asp)
--  Web程序开发  (http://zhirui.net/bbs/list.asp?boardid=22)
----  把SQL Server表中的自动编号ID重新开始排列  (http://zhirui.net/bbs/dispbbs.asp?boardid=22&id=3294)

--  作者:zhirui
--  发布时间:2013-07-08 15:58:59
--  把SQL Server表中的自动编号ID重新开始排列
 说法一:

有两种方法:
方法1:
truncate table 你的表名 --这样不但将数据删除,而且可以重新置位identity属性的字段。


方法2:
delete from 你的表名
dbcc checkident(你的表名,reseed,0) 重新置位identity属性的字段,让其下个值从1开始


说法二:

1.TRUNCATE TABLE
删除表中的所有行,而不记录单个行删除操作。

语法
TRUNCATE TABLE name

参数
name

是要截断的表的名称或要删除其全部行的表的名称。

注释
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

TRUNCATE TABLE 不能用于参与了索引视图的表。

2.
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

说法三:

如何定义自动编号字段的初始值和步进值?

问题:

如何定义自动编号字段的初始值和步进值?
如何定义自动增加字段的初始值和步进值?
如何使删除过数据的自动增加字段的开始值重新从1开始?

回答:

通过以下语句,你可以在建表的时候指定其起始值和步进值:

CREATE TABLE tblNewOrder2 (
OrderId AUTOINCREMENT (1000, 10),
ItemId LONG, Quantity LONG)



你也可以用下面的语句修改下一个起始值和步进值:

ALTER TABLE tblOrder
ALTER COLUMN OrderId COUNTER (2000, 50)


要重新开始:
ALTER TABLE tableName
ALTER COLUMN OrderId COUNTER (1, 1)


在 VBE 界面里面用以下代码:
docmd.runsql "ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1)"



这里要注意的是自动编号往往被用作标识记录的唯一性,但是 Jet 在用 DDL 语句更改自动编号的同时不会保证修改后的自动编号仍然保持唯一性,因此会出现标识号重复的现象。要避免这一现象最好把自动编号设定为主键、或者不可重复。