当前位置: 代码迷 >> Sql Server >> 删除数据第一行,为什么ID从2开始,如何解决
  详细解决方案

删除数据第一行,为什么ID从2开始,如何解决

热度:70   发布时间:2016-04-27 18:06:49.0
删除数据第一行,为什么ID从2开始,怎么解决?
用delete删除数据时,删除第一行,第一行的信息没有了,但ID是从2开始的,怎么解决?在不删除其他数据的情况下怎么让ID从一开始?

------解决方案--------------------
探讨
用delete删除数据时,删除第一行,第一行的信息没有了,但ID是从2开始的,怎么解决?在不删除其他数据的情况下怎么让ID从一开始?

------解决方案--------------------
SQL code
利用触发器实现标识列连续。(支持批量插入) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ttt]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[ttt]GO/****** Object:  Table [dbo].[ttt]    Script Date: 2008-12-15 17:11:26 ******/CREATE TABLE [dbo].[ttt] (    [id] [int] IDENTITY (1, 1) NOT NULL ,    [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [time] [datetime] NULL ) ON [PRIMARY]GOALTER TABLE [dbo].[ttt] ADD     CONSTRAINT [PK_ttt] PRIMARY KEY  CLUSTERED     (        [id]    )  ON [PRIMARY] GOinsert into ttt(name,time) values('logan',getdate());insert into ttt(name,time) values('peter',getdate());insert into ttt(name,time) values('man',getdate());insert into ttt(name,time) values('lida',getdate());insert into ttt(name,time) values('fcuandy',getdate());select * from ttt/*1   logan   2008-12-15 17:36:37.7802   peter   2008-12-15 17:36:37.7803   man 2008-12-15 17:36:37.7804   lida    2008-12-15 17:36:37.7805   fcuandy 2008-12-15 17:36:37.793*/GOCREATE TRIGGER tr ON tttINSTEAD OF INSERTAS    SET IDENTITY_INSERT ttt ON    DECLARE @n INT    SELECT @n=MAX(id) FROM ttt    ;WITH fc AS    (        SELECT n=1        UNION ALL        SELECT nn=n+1 FROM fc WHERE n<@n    ),fc1 AS    (    SELECT n FROM fc a    LEFT JOIN ttt b        ON a.n = b.id        WHERE b.id IS NULL    )    INSERT ttt(id,name,time) SELECT n,name,time        FROM        (SELECT ROW_NUMBER() OVER (ORDER BY GETDATE()) idx,n FROM fc1) a    INNER JOIN        (        SELECT idx=ROW_NUMBER() OVER (ORDER BY GETDATE()),name,time FROM inserted        ) b        ON a.idx=b.idx    DECLARE @r INT    SELECT @r=@@ROWCOUNT        SET IDENTITY_INSERT ttt OFF        INSERT ttt(name,time) SELECT name,time FROM             (                SELECT idx=ROW_NUMBER() OVER (ORDER BY GETDATE()),name,time FROM inserted            ) x            WHERE idx>@r    GODELETE FROM ttt WHERE name = 'peter' OR name='lida'GOINSERT ttt SELECT 'xxx',getdate()INSERT ttt SELECT 'yyy',GETDATE()GOSELECT * FROM ttt/*1   logan   2008-12-15 17:37:20.9672   xxx 2008-12-15 17:37:21.0133   man 2008-12-15 17:37:20.9674   yyy 2008-12-15 17:37:21.0305   fcuandy 2008-12-15 17:37:20.967*/DELETE FROM ttt WHERE name ='xxx' OR name='yyy'INSERT ttt SELECT 'roy_88',GETDATE() UNION ALL SELECT 'limpire',GETDATE() UNION ALL SELECT '熊',GETDATE()SELECT * FROM ttt/*1   logan   2008-12-15 17:38:29.4502   roy_88  2008-12-15 17:38:29.5303   man 2008-12-15 17:38:29.4674   limpire 2008-12-15 17:38:29.5305   fcuandy 2008-12-15 17:38:29.4676   熊   2008-12-15 17:38:29.530*/本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fcuandy/archive/2008/12/15/3522876.aspx
------解决方案--------------------
SQL code
--使用dbcc checkident检查和设置表的标识值create table tb( id int primary key identity, name varchar(50)) insert into tb  select 'a' union all select 'b'  union all  select 'c' union all select 'd'go dbcc checkident(tb,noreseed)godelete from tb where id>2go--删除记录后,表tb只剩下两条记录了,但是此时表tb的标识值仍为4,可以用下面的语句重置标识值为2dbcc checkident(tb,reseed,2)godbcc checkident(tb,noreseed)go
------解决方案--------------------
取消自增长,手动填入ID
------解决方案--------------------
使用truncate即可,LZ试试吧。
------解决方案--------------------
楼主,提供下面两种方法,希望可以解决你的问题。
方法一:
  相关解决方案