国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQLSERVER truncate table之后是否會重置表的自增值

2024-07-21 02:50:32
字體:
來源:轉載
供稿:網友
SQLSERVER truncate table之后是否會重置表的自增值SQLSERVER truncate table之后是否會重置表的自增值

今天清理業務庫數據的時候,開發人員說可以使用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_idORDER BY  pat.[分區編號]

發現兩個表的新插入的數據都放在第一個文件組,并且自增id又從1開始了

馬上測試一下,結果發現truncate table真的重置了種子,以前是知道的,不過以前用到truncate的情況很少

USE [test]GOCREATE TABLE truncatetabletestidentity (id INT IDENTITY(1,1),NAME NVARCHAR(20))GOINSERT [dbo].[truncatetabletestidentity]SELECT 'ni' UNION ALLSELECT 'we' UNION ALLSELECT 'pp'SELECT * FROM [dbo].[truncatetabletestidentity]GOTRUNCATE TABLE [dbo].[truncatetabletestidentity]

接下來收縮數據庫,磁盤空間又“多出“了450GB空間,磁盤預警消失了~

如有不對的地方,歡迎大家拍磚o(∩_∩)o

2014-4-7補充:

在MSDN里面提到

DBCC CHECKIDENT (Transact-SQL)

DBCC CHECKIDENT (table_name, RESEED,new_reseed_value)

將當前標識值設置為new_reseed_value。如果自從創建表以來未在表中插入任何行,或者已使用 TRUNCATE TABLE 語句刪除所有行,則在運行 DBCC CHECKIDENT 之后插入的第一行將使用new_reseed_value作為標識。否則,插入的下一行將使用new_reseed_value+當前增量值。

如果該表不為空,那么將標識值設置為小于標識列中的最大值的數字時,將會出現下列情況之一:

  • 如果標識列中存在 PRIMARY KEY 或 UNIQUE 約束,則隨后在表中執行插入操作時將生成錯誤消息 2627,原因是生成的標識值將與現有值沖突。

  • 如果不存在 PRIMARY KEY 或 UNIQUE 約束,則隨后的插入操作將產生重復的標識值。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉义县| 临海市| 宾川县| 民勤县| 浦北县| 堆龙德庆县| 阜平县| 二手房| 青龙| 横峰县| 中牟县| 维西| 岑溪市| 广汉市| 凌源市| 丽水市| 宝清县| 连江县| 阿拉善右旗| 宁乡县| 获嘉县| 漳浦县| 循化| 北辰区| 府谷县| 田阳县| 鹤庆县| 荃湾区| 和平县| 东光县| 古交市| 稷山县| 江华| 甘洛县| 萨嘎县| 贵南县| 临高县| 大竹县| 小金县| 保定市| 漠河县|