表中有一个标识列,表中一些数据被删除掉了,现在想修改标识列让其重新充1开始连续排列 要怎么弄呢?

解决方案 »

  1.   

    DBCC CHECKIDENT (表, RESEED, 2)
      

  2.   

    这样做没有实质意义
    需要时候处理吧
    --2000
    select *,ID=(select count(*) from tb where id<=t.id) from tb t
    --2005
    select *,ID=row_number()over(order by (select 1))from tb
      

  3.   

    直接用dbcc命令让自增列的初始值回复到1就可以了。
    DBCC CHECKIDENT (表名, RESEED, 1)
      

  4.   

    方法一:见一楼:DBCC CHECKIDENT (表, RESEED, 2)
    方法二:建立临时表,设定一个自增列,然后将数据存放到临时表,然后再导回来
      

  5.   


    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_DropIDENTITY]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
    drop procedure [dbo].[p_DropIDENTITY] 
    GO /*--标识列转换为普通列 采用修改标识列名,然后按新规则重列的方法处理 
    只适用于标识列没有与其他对象有关联的表 
    转换后,列的相关对象也不会恢复 
    有一定的局限性,仅供参考 --邹建 2005.05(引用请保留此信息)--*/ /*--调用示例 EXEC p_DropIDENTITY 'tb' 
    --*/ 
    CREATE PROC p_DropIDENTITY 
    @TableName sysname --要处理的表名 
    AS 
    IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0 
    BEGIN 
    RAISERROR('"%s" 必须是当前数据库中已经存在的用户表',12,16,@TableName) 
    RETURN 
    END --标识列转换处理检查 
    DECLARE @s nvarchar(1000),@FieldName sysname,@bkFieldName sysname,@sql nvarchar(4000) 
    SELECT @FieldName=QUOTENAME(c.name), 
    @bkFieldName=CAST(NEWID() as char(36)), 
    @s=@FieldName+N' '+QUOTENAME(t.name) 
    +CASE WHEN t.name LIKE '%int' THEN N'' 
    ELSE N'('+CAST(c.prec as varchar) 
    +N','+CAST(c.scale as varchar)+N')' 
    END 
    FROM sysobjects o,syscolumns c,systypes t 
    WHERE o.name=@TableName 
    AND o.id=c.id 
    AND c.xusertype=t.xusertype 
    AND c.status=0x80 
    IF @@ROWCOUNT=0 
    BEGIN 
    RAISERROR(N'表 "%s" 中无标识列',1,16,@TableName) 
    RETURN 
    END --修改标识列名 
    SET @sql=QUOTENAME(@TableName)+N'.'+@FieldName 
    EXEC sp_rename @sql,@bkFieldName,N'COLUMN' --转换为标识列处理 
    SELECT @TableName=QUOTENAME(@TableName), 
    @bkFieldName=QUOTENAME(@bkFieldName) 
    EXEC('ALTER TABLE '+@TableName+N' ADD '+@s) 
    EXEC('UPDATE '+@TableName+N' SET '+@FieldName+N'='+@bkFieldName+N' 
    ALTER TABLE '+@TableName+N' DROP COLUMN '+@bkFieldName) 
    RAISERROR(N'表 "%s" 中的标识列 "%s" 已经转换为普通列',1,16,@TableName,@FieldName) 
    GO --------------------------------------------------------------- 四个步骤: 
    1、增加一个int类型的列 
       alter table add xinglie int 
    2、更新新列的数据为自增列的数据 
       update tb set xinglie=自增列名 
    3、删除自增列 
       alter table tb drop column 自增列 
    4、更改新列名为原自增列的列名 
       exec sp_rename N'tb.xinglie','原自增列名',N'column' 
    --------------------------------------------------------------- sp_configure 'Allow update',1 
    RECONFIGURE WITH OVERRIDE 
    update syscolumns set colstat=0 where colstat=1 and id=object_id('tablename') 
    sp_configure 'Allow update',0 
    RECONFIGURE WITH OVERRIDE 
    go