Sql server 2008 将所有标识重置为1
我编写了将所有表的标识重置为1的代码,但在某些表中,标识不会重置为1,否则将重置为0或2或其他数字 这是我的密码Sql server 2008 将所有标识重置为1,sql-server-2008,identity,reset,Sql Server 2008,Identity,Reset,我编写了将所有表的标识重置为1的代码,但在某些表中,标识不会重置为1,否则将重置为0或2或其他数字 这是我的密码 declare @Count int declare @C int declare @Str varchar(20) set @C=1 set @Count=(select COUNT(*) TABLE_NAME from INFORMATION_SCHEMA.TABLES ) while @C<@Count BEG
declare @Count int
declare @C int
declare @Str varchar(20)
set @C=1
set @Count=(select COUNT(*) TABLE_NAME from INFORMATION_SCHEMA.TABLES )
while @C<@Count
BEGIN
with Records AS(select row_number() over(order by TABLE_NAME) as 'row1', *
from INFORMATION_SCHEMA.TABLES)
select @Str= TABLE_NAME from records
where row1=@C
set @C=@C+1
DBCC CHECKIDENT (@Str , reseed, 0)
END
。如果表创建后没有插入任何行,或者使用TRUNCATE table语句删除了所有行,则运行DBCC CHECKIDENT后插入的第一行将使用new_reseed_值作为标识。否则,插入的下一行使用新的_重设种子_值+当前增量值,但我们希望将所有标识重置为1。有人这样做了吗?假设您的所有表实际上都是空的,这应该适合您。它循环遍历定义了标识1,1的所有表,并对它们重新设定种子,但从未插入行或已被截断且不需要重新设定种子的表除外
DECLARE @Name NVARCHAR(1000)
DECLARE @C1 AS CURSOR;
SET @C1 = CURSOR FAST_FORWARD
FOR SELECT Quotename(Object_schema_name(object_id)) + '.'
+ Quotename(Object_name(object_id))
FROM sys.identity_columns
WHERE Objectpropertyex(object_id, 'IsUserTable') = 1
AND seed_value = 1
AND increment_value = 1
AND last_value IS NOT NULL;
OPEN @C1;
FETCH NEXT FROM @C1 INTO @Name;
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC CHECKIDENT (@Name, reseed, 0)
FETCH NEXT FROM @C1 INTO @Name;
END
检查这里:[[1]:只需使用光标。while循环效率很低。