码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-21 18:15:52      阅读:770      评论:0      收藏:0      [点我收藏+]

标签:

一个含有自增序列的表,使用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(NTB) 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(NP_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(NP_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

输出结果如下:

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/OliverQin/p/5063947.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!