加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL SERVER truncate table后会不会重置表的自增值

发布时间:2016-10-16 04:43:43 所属栏目:MsSql教程 来源:站长网
导读:今天清理业务库数据的时候,开发人员说可以使用truncate table把两个表的所有数据清理掉 这两个表都有自增ID,都做了表分区,单表200GB,使用 SELECT IDENT_CURRENT('') 的时候两个表 的当前自增值是3000012,这两个表几乎是一模一样的,除了一两个字段不

今天清理业务库数据的时候,开发人员说可以使用truncate table把两个表的所有数据清理掉

这两个表都有自增ID,都做了表分区,单表200GB,使用 SELECT IDENT_CURRENT('') 的时候两个表

的当前自增值是3000012,这两个表几乎是一模一样的,除了一两个字段不一样

我执行两个SQL语句把两个表都truncate掉,然后就忘记了收缩数据库和重置种子值

由于分区函数的最后一个值是2000000,那么后插入的数据都会积聚在最后一个文件组

1、重置种子值,让数据重新利用第一个文件组

2、修改分区方案,使用 split range,向分区函数添加新值

虽然不重置也可以,但是如果使用 split range,向分区函数添加新值工作量就大了,为了不增加工作量当然重置种子值最好

因为当时太忙,继续搬数据库去了

下班回来才想起这件事,还需要收尾工作,马上远程到业务数据库的机器,使用下面的SQL语句查看分区情况

--分区情况
SELECT  pat.* ,
        fg.[groupname] AS '分区方案对应的文件组名称' ,
        patsch.name '当前分区函数对应的分区方案'
FROM    sys.destination_data_spaces AS dds
        INNER JOIN sysfilegroups AS fg ON dds.[data_space_id] = fg.[groupid]
        INNER JOIN ( SELECT $PARTITION.Fun_New_PostLog_Id(id) AS 分区编号 ,
                            MIN(id) AS Min_value ,
                            MAX(id) AS Max_value ,
                            COUNT(id) AS 记录数
                     FROM   dbo.PostLog
                     GROUP BY $PARTITION.Fun_New_PostLog_Id(id)
                   ) AS pat ON pat.[分区编号] = dds.[destination_id]
        INNER JOIN sys.partition_schemes AS patsch ON dds.[partition_scheme_id] = patsch.data_space_id
ORDER BY  pat.[分区编号]

发现两个表的新插入的数据都放在第一个文件组,并且自增id又从1开始了

SQL SERVER truncate table后会不会重置表的自增值

查看本栏目更多精彩内容:http://www.bianceng.cn/database/SQLServer/

马上测试一下,结果发现truncate table真的重置了种子,以前是知道的,不过以前用到truncate的情况很少

USE [test]
GO
CREATE TABLE truncatetabletestidentity (id INT IDENTITY(1,1),NAME NVARCHAR(20))
GO
    
INSERT [dbo].[truncatetabletestidentity]
SELECT 'ni' UNION ALL
SELECT 'we' UNION ALL
SELECT 'pp'
    
SELECT * FROM [dbo].[truncatetabletestidentity]
GO
    
TRUNCATE TABLE [dbo].[truncatetabletestidentity]

接下来收缩数据库,磁盘空间又“多出“了450GB空间,磁盘预警消失了~

如有不对的地方,欢迎大家拍砖o(∩_∩)o

2014-4-7补充:

在MSDN里面提到

DBCC CHECKIDENT (Transact-SQL)

SQL SERVER truncate table后会不会重置表的自增值

SQL SERVER truncate table后会不会重置表的自增值

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读