jum*_*ojs 245 sql-server auto-increment delete-row
我从SQL Server数据库中的表中删除了一些记录.现在ID从101到1200.我想再次删除记录,但我希望ID能够回到102.有没有办法在SQL Server中执行此操作?
Rob*_*ner 428
发出以下命令重新设置mytable以从1开始:
DBCC CHECKIDENT (mytable, RESEED, 0)
Run Code Online (Sandbox Code Playgroud)
在线上书籍(BOL,SQL帮助)中阅读它.另外请注意,您没有比您设置的种子更高的记录.
Fat*_*n P 80
DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number)
Run Code Online (Sandbox Code Playgroud)
如果number = 0,则在下一个插入中,自动增量字段将包含值1
如果number = 101,则在下一个插入中,自动增量字段将包含值102
一些额外的信息...可能对您有用在上面的查询中
给出自动增量之前number
,您必须确保现有表的自动增量列包含的值小于该值number
.
要从表(table1)获取列(column_name)的最大值,可以使用以下查询
SELECT MAX(column_name) FROM table1
Run Code Online (Sandbox Code Playgroud)
use*_*430 33
半白痴:
declare @max int;
select @max = max(key) from table;
dbcc checkident(table,reseed,@max)
Run Code Online (Sandbox Code Playgroud)
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
xaa*_*xaa 12
试试这个:
ALTER TABLE tablename AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)
删除并重新设定数据库中的所有表.
USE [DatabaseName]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- Disable All the constraints
EXEC sp_MSForEachTable "DELETE FROM ?" -- Delete All the Table data
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)' -- Reseed All the table to 0
Exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- Enable All the constraints back
-- You may ignore the errors that shows the table without Auto increment field.
Run Code Online (Sandbox Code Playgroud)
根据已接受的答案,对于遇到类似问题且具有完整架构资格的人:
( [MyDataBase].[MySchemaName].[MyTable]
)...导致错误,您需要处于该数据库的上下文中
也就是说,以下内容将引发错误:
DBCC CHECKIDENT ([MyDataBase].[MySchemaName].[MyTable], RESEED, 0)
Run Code Online (Sandbox Code Playgroud)
用单引号将完全限定的表名括起来:
DBCC CHECKIDENT ('[MyDataBase].[MySchemaName].[MyTable]', RESEED, 0)
Run Code Online (Sandbox Code Playgroud)
几个答案建议使用这样的语句:
DBCC CHECKIDENT (mytable, RESEED, 0)
Run Code Online (Sandbox Code Playgroud)
但是 OP 说“删除了一些记录”,这可能不是全部,因此 0 值并不总是正确的。另一个答案建议自动查找最大当前值并重新设定为该值,但如果表中没有记录,则会遇到麻烦,因此 max() 将返回 NULL。建议使用简单的评论
DBCC CHECKIDENT (mytable)
Run Code Online (Sandbox Code Playgroud)
重置值,但另一条评论正确指出,这只会将值增加到表中已有的最大值;如果它已经高于表中的最大值,这将不会减少该值,这是 OP 想要做的。
一个更好的解决方案结合了这些想法。第一个 CHECKIDENT 将值重置为 0,第二个将其重置为表中当前的最高值,以防表中有记录:
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT (mytable)
Run Code Online (Sandbox Code Playgroud)
正如多条评论所指出的,确保其他表中没有指向已删除记录的外键。否则,这些外键将指向您在重新播种表后创建的记录,这几乎肯定不是您的想法。
归档时间: |
|
查看次数: |
326541 次 |
最近记录: |