Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 将所有标识重置为1_Sql Server 2008_Identity_Reset - Fatal编程技术网

Sql server 2008 将所有标识重置为1

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

我编写了将所有表的标识重置为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
    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循环效率很低。