zoukankan      html  css  js  c++  java
  • 含有自增序列的表中使用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

    输出结果如下:

  • 相关阅读:
    Java 如何有效地避免OOM:善于利用软引用和弱引用
    LRU缓存实现(Java)
    Java实现LRU(最近最少使用)缓存
    HashSet,TreeSet和LinkedHashSet的区别
    IIS-详解IIS中URL重写工具的规则条件(Rule conditions)
    IIS-代理
    IIS-新建网站
    IIS-反向代理配置&&插件安装
    IIS-C#项目环境搭建
    IIS-Windows10如何安装
  • 原文地址:https://www.cnblogs.com/OliverQin/p/5063947.html
Copyright © 2011-2022 走看看