可以用
@@identity取得当前的标识值
可以用
dbcc checkdient 重置标识的起始值

解决方案 »

  1.   

    可以用
    @@identity取得当前的标识值
    可以用
    dbcc checkident 重置标识的起始值
      

  2.   

    递增字段从新开始记数的情况    TRUNCATE TABLE tablename  后就会这样
                                  或者是去掉了自增的列,后来又添加,造成数据不唯一
    如何查看SQL的当前递增值是多少,如何修改这个递增值identity(int,1,1)  这个就是表示从1开始以1来递增。
    identity(int,1,2)  这个就是表示从1开始以2来递增。
    identity(int,1,1)     --在生成表的脚本是可以看到。
      

  3.   

    SQL SERVER 2000 中的标识值获取函数     选择自 zjcxc 的 Blog  
    关键字   SQL SERVER 2000 中的标识值获取函数 
    出处    
     
     SQL SERVER 2000 中的标识值获取函数 
    IDENTITY(标识)列,也有很多人称之为自增列,在SQL Server 2000中,标识列通过IDENTITY来定义,下面是与获取最后插入记录的标识值有关的函数的一个示例说明     SQL Server 中,可以使用 SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT() 来取得最后插入记录的值值,它们的区别在于:
    SCOPE_IDENTITY() 返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
    @@IDENTITY       返回在当前会话的所有表中生成的最后一个标识值
    IDENT_CURRENT()  返回为任何会话和任何作用域中的指定表最后生成的标识值
    下面以一个示例来说明它们的区别 -- a) 示例代码 
    -- ===========================================
    -- 创建测试表
    -- ===========================================
    USE tempdb
    GOCREATE TABLE t1(id int IDENTITY,col int)
    INSERT t1 SELECT 1
    UNION ALL SELECT 2
    CREATE TABLE t2(id int IDENTITY,col int)
    GOCREATE TRIGGER TR_insert_t2 ON t2
    FOR INSERT
    AS
        INSERT t1 SELECT 3
    GO -- ===========================================
    -- 测试三个函数..1
    -- ===========================================
    INSERT t2 VALUES(1)
    SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
        [@@IDENTITY]=@@IDENTITY,
        [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),
        [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')/*--结果
    SCOPE_IDENTITY()   @@IDENTITY   IDENT_CURRENT() For t1     IDENT_CURRENT() For t2                   
    ------------------ ------------ -------------------------- -----------------------
    1                  3            3                          1(所影响的行数为 1 行)
    --*/
    GO-- ===========================================
    -- 测试三个函数..2
    -- ===========================================
    INSERT t1 VALUES(10)
    SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
        [@@IDENTITY]=@@IDENTITY,
        [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),
        [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')/*--结果
    SCOPE_IDENTITY()   @@IDENTITY   IDENT_CURRENT() For t1     IDENT_CURRENT() For t2                   
    ------------------ ------------ -------------------------- -----------------------
    4                  4            4                          1(所影响的行数为 1 行)
    --*/
    GO-- ===========================================
    -- 测试三个函数..3
    -- ** 开启一个新连接,执行下面的代码 **
    -- ===========================================
    SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
        [@@IDENTITY]=@@IDENTITY,
        [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),
        [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')/*--结果
    SCOPE_IDENTITY()   @@IDENTITY   IDENT_CURRENT() For t1     IDENT_CURRENT() For t2                   
    ------------------ ------------ -------------------------- -----------------------
    NULL               NULL         4                         &n --===========================================
    -- 删除测试环境
    -- ===========================================
    DROP TABLE t1,t2 -- b) 代码结果说明 
    从上面的代码可以看到:
    IDENT_CURRENT()  始终返回指定表最后插入的标识值
    @@IDENTITY       返回当前会话的标识值,无论是否在同一个作用域,在测试1、2中,可以看到它返回的是触发器中插入记录的标识值,而在测试3中,因为当前会话无插入记录,所以返回NULL
    SCOPE_IDENTITY() 返回当前会话同一作用域的标识值,所以在测试1、2中,它返回的值不受触发器的影响,而在测试3中,因为当前会话无插入记录,所以返回NULL
     
      

  4.   

    truncate,delete,drop的异同点说明:本文摘自oracle技术用户讨论组truncate,delete,drop的异同点  
    注意:这里说的delete是指不带where子句的delete语句 
      
    相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据  
    不同点:  
    1. truncate和 delete只删除数据不删除表的结构(定义)  
         drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.  
    2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.  
        truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.  
    3.delete语句不影响表所占用的extent, 高水线(high water)保持原位置不动  
       显然drop语句将表所占用的空间全部释放  
       truncate 语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始).  
    4.速度,一般来说: drop> truncate > delete  
    5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及  
    使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.  
    想删除表,当然用drop  
    想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.  
    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据