• 含有自增序列的表中使用truncate与delete的不同结果


    一个含有自增序列的表,使用delete跟truncate之后会有什么不同结果呢?

    大概说一下,使用truncate,表中的记录全部被清除,如果向表中插入数据,那么数据的排序是从1开始的。

    如果使用的是delete,那么记录的排序值不会被清除,它是一次累加上去的。下面给出一个小例子,可以参考一下

    ------------================================
    --Author:oliver QIN
    --DATE:2015-12-21
    --DESC:INDETITY(1,1)使用delete跟truncate后排序是怎么变化的
    ---==========================================建表
    if exists(select * from sysobjects where ID=OBJECT_ID(N'TB') AND XTYPE='u')
    drop table TB
    CREATE TABLE TB(ID INT IDENTITY(1,1),NAME NVARCHAR(100),dtDate datetime)
    
    INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
                   SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
    
                   
    --===============建立存储过程(delete),先判断是否存在数据,如果存在就删除,然后插入数据,看序列的变化
    go
    IF((SELECT COUNT(*) FROM SYSOBJECTS WHERE ID=OBJECT_ID(N'P_sample_DELETE') AND XTYPE='P')>0 )
    DROP PROC P_sample_DELETE
    GO
    CREATE PROC P_sample_DELETE
    as
    begin
       if((select count(*) from TB WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10))>0)
      begin
        delete from TB --WHERE  dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)    
      end
      INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
                   SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
    end
    
    GO
    --===============建立存储过程(truncate),先判断是否存在数据,如果存在就删除,然后插入数据,看序列的变化
    
    
    IF((SELECT COUNT(*) FROM SYSOBJECTS WHERE ID=OBJECT_ID(N'P_sample_TRUNCATE') AND XTYPE='P')>0 )
    DROP PROC P_sample_TRUNCATE
    GO
    CREATE PROC P_sample_TRUNCATE
    as
    begin
       if((select count(*) from TB WHERE dtDate=SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10))>0)
      begin
        TRUNCATE TABLE TB
      end
      INSERT INTO TB SELECT 'JACK',SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10) UNION ALL
                   SELECT 'TOM' ,SUBSTRING(convert(varchar,dateadd(dd,-day(getdate()),getdate()),120),1,10)
    end
    --------------调用三次TRUNCATE 
    EXEC P_sample_TRUNCATE 
    EXEC P_sample_TRUNCATE 
    EXEC P_sample_TRUNCATE

    输出结果如下:

    -------------调用三次DELETE 
    EXEC P_sample_DELETE
    EXEC P_sample_DELETE
    EXEC P_sample_DELETE

    输出结果如下:

  • 相关阅读:
    js上传文件(图片)限制格式及大小为3M
    position:fixed部分版本的浏览器不支持
    iframe自适应高度的方法
    div左右自适应高度一致
    IE中部分版本的浏览器对Select标签设置innerHTML无效的问题
    在ie10中如何禁用输入框中的小眼睛 与 叉叉 删除按钮
    input输入框默认文字,点击消失
    调用iframe中父页面/子页面中的JavaScript方法
    iframe的一些介绍
    artDialog的一些例子与一些属性的介绍。
  • 原文地址:https://www.cnblogs.com/OliverQin/p/5063947.html
Copyright © 2020-2023  润新知