有学生表(student)如下:
ID   name
100  张三
101  李四
102  王五
103  赵六
其中,ID为Primary Key identity(1,1)。之所以ID为100,是因为软件编制过程造成,软件完成后我会将studnet表清空。现想要实现:软件完成后,用户在开始添加数据时不要从104开始,而是从1开始。
但能力有限,看似简单的问题却无法解决,只得求各高手帮助了。
   

解决方案 »

  1.   

    联机文档
    TRUNCATE TABLE
    删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 在功能上与没有 WHERE 子句的 DELETE 语句相同;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。
    语法 
    TRUNCATE TABLE 
        [ { database_name.[ schema_name ]. | schema_name . } ]
        table_name
    [ ; ]
     备注
    与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:
    所用的事务日志空间较少。
    DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一个条目。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。 
    使用的锁通常较少。
    当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。 
    表中将毫无例外地不留下任何页。
    执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。
    TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,请使用 DROP TABLE 语句。
    如果表包含标识列,该列的计数器重置为该列定义的种子值。如果未定义种子,则使用默认值 1。若要保留标识计数器,请使用 DELETE。
      

  2.   

    if object_id('tb') is not null
    drop table tb
    go
    create table tb(id int,name varchar(10))
    insert into tb select 100,'张三'
    insert into tb select 101,'李四'
    insert into tb select 102,'王五'
    insert into tb select 103,'赵六'alter table tb add id2 int identity(1,1)
    go
    alter table tb drop column id
    go
    exec sp_rename 'tb.id2','id'
    go
    select * from tbname id
    张三 1
    李四 2
    王五 3
    赵六 4不能直接改,加新列,删旧列,改名
      

  3.   

    软件完成后我会将studnet表清空truncate table tbtruncate可以,上面看错...
      

  4.   

    先清空表   
    然后使用如下命令DBCC   CHECKIDENT   (student, RESEED,1) 
      

  5.   

    DBCC   CHECKIDENT   (student, RESEED,0) 
      

  6.   

    If Object_id('tempdb..#','U') Is Not Null
    Drop table #
    Create Table #(id int Identity(1,1),x nchar(1))
    Insert Into #
    Select 'A' Union All
    Select 'B' Union All
    Select 'C' Union All
    Select 'D' Select * From #
    Delete From #Dbcc CheckIdent (#,Reseed,0)Insert Into #
    Select 'F' Union All
    Select 'H' Union All
    Select 'C' 
    Select * From #/*
    id          x
    ----------- ----
    1           A
    2           B
    3           C
    4           D检查标识信息: 当前标识值 '4',当前列值 '0'。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    id          x
    ----------- ----
    1           F
    2           H
    3           C
    */
      

  7.   


    truncate table student
    --或者
    dbcc  checkident(school,reseed,1)
      

  8.   

    这种小问题直接看SQL Server帮助文档就有了,不要浪费分数啊.
      

  9.   

    truncate table student
    --或者
    delete from student
    dbcc checkident(school,reseed,1)
      

  10.   

    LS 的LS 真小气。
    二十分都给我,我也不觉得多。
    如果只是清除一列。删除再键比较好
    如果是整表truncate吧。
      

  11.   

    谢谢回复的各位朋友,我想能回复决不是为了屈屈20分数。以共同提高为目的,我说说我的看法:
    1、关于truncate table:
    在SQL联机丛书还有这一句:“...对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。...”。实践证明,果真如此啊,那个student的studentid不仅是primary key,还是它下级表ID的母亲。(这样说有点别扭),所以,1、2楼的朋友回答是错的。
    2、关于DBCC checkindent:
    本人用VB做C/S程序,在VB中真接粘贴5楼答案,具体如下:
    cnMain.Execute "DBCC   CHECKIDENT   (student, RESEED,0) " 'cnMain:connection对象通过!
    3、关于3楼先加列后删的方法:因为DBCC的方法更加简单所以没有测试,我想应该可以。