SQL Server表分区删除详情


Posted in SQL Server onOctober 16, 2021

一、引言

删除分区又称为合并分区,简单地讲就是将多个分区的数据进行合并。现以表Sales.SalesOrderHeader作为示例,演示如何进行表分区删除。

重要的事情说三遍:备份数据库!备份数据库!备份数据库!

二、演示

2.1、数据查询

2.1.1、 查看分区元数据

SELECT * FROM SYS.PARTITION_FUNCTIONS       --分区函数
SELECT * FROM SYS.PARTITION_RANGE_VALUES    --分区方案

SQL Server表分区删除详情

2.1.2、统计每个分区的数据量

SELECT $PARTITION.SalesOrderHeader_OrderDate(OrderDate) AS NUMBER,COUNT(1) AS COUNT
FROM [Sales].[SalesOrderHeader]
GROUP BY $PARTITION.SalesOrderHeader_OrderDate(OrderDate)

分区表中有数据时,是不能够删除分区方案和分区函数的,只能将数据先移到其它表中,再删除。

2.2、删除实操

2.2.1、合并原表分区

ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2011-01-01 00:00:00.000')
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2012-01-01 00:00:00.000')
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2013-01-01 00:00:00.000')
ALTER PARTITION FUNCTION SalesOrderHeader_OrderDate() MERGE RANGE('2014-01-01 00:00:00.000')

2.2.2、备份原表所有索引的创建脚本

ALTER TABLE [Sales].[SalesOrderHeader] ADD  CONSTRAINT [PK_SalesOrderHeader_SalesOrderID] PRIMARY KEY NONCLUSTERED 
(
    [SalesOrderID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

2.2.3、删除原表所有索引

ALTER TABLE [Sales].[SalesOrderHeader] DROP CONSTRAINT [PK_SalesOrderHeader_SalesOrderID]

2.2.4、创建临时表

CREATE TABLE [Sales].[SalesOrderHeader_Temp](
    [SalesOrderID] [INT] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [RevisionNumber] [TINYINT] NOT NULL,
    [OrderDate] [DATETIME] NOT NULL,
    [DueDate] [DATETIME] NOT NULL,
    [ShipDate] [DATETIME] NULL,
    [Status] [TINYINT] NOT NULL,
    [OnlineOrderFlag] [dbo].[Flag] NOT NULL,
    [SalesOrderNumber]  AS (ISNULL(N'SO'+CONVERT([NVARCHAR](23),[SalesOrderID]),N'*** ERROR ***')),
    [PurchaseOrderNumber] [dbo].[OrderNumber] NULL,
    [AccountNumber] [dbo].[AccountNumber] NULL,
    [CustomerID] [INT] NOT NULL,
    [SalesPersonID] [INT] NULL,
    [TerritoryID] [INT] NULL,
    [BillToAddressID] [INT] NOT NULL,
    [ShipToAddressID] [INT] NOT NULL,
    [ShipMethodID] [INT] NOT NULL,
    [CreditCardID] [INT] NULL,
    [CreditCardApprovalCode] [VARCHAR](15) NULL,
    [CurrencyRateID] [INT] NULL,
    [SubTotal] [MONEY] NOT NULL,
    [TaxAmt] [MONEY] NOT NULL,
    [Freight] [MONEY] NOT NULL,
    [TotalDue]  AS (ISNULL(([SubTotal]+[TaxAmt])+[Freight],(0))),
    [Comment] [NVARCHAR](128) NULL,
    [rowguid] [UNIQUEIDENTIFIER] ROWGUIDCOL  NOT NULL,
    [ModifiedDate] [DATETIME] NOT NULL
)

2.2.5、更改原表数据空间类型

1)对着原表Sales.SalesOrderHeader点击"右键"->"设计"。

SQL Server表分区删除详情

2)点击菜单栏"视图"->"属性窗口"。

SQL Server表分区删除详情

3)将数据空间类型更改为"文件组",常规数据空间规范默认为"PRIMARY"。

SQL Server表分区删除详情

2.2.6、移动原表分区数据到临时表

ALTER TABLE [Sales].[SalesOrderHeader] SWITCH PARTITION 1 TO [Sales].[SalesOrderHeader_Temp] PARTITION 1

2.2.7、创建原表所有索引 到临时表

ALTER TABLE [Sales].[SalesOrderHeader_Temp] ADD  CONSTRAINT [PK_SalesOrderHeader_SalesOrderID] PRIMARY KEY NONCLUSTERED 
(
    [SalesOrderID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

2.2.8、删除原表

DROP TABLE Sales.SalesOrderHeader

2.2.9、删除分区方案和分区函数

DROP PARTITION SCHEME SalesOrderHeader_OrderDate
DROP PARTITION FUNCTION SalesOrderHeader_OrderDate

2.2.10重命名表名

EXEC SP_RENAME '[Sales].[SalesOrderHeader_Temp]','SalesOrderHeader'

到此这篇关于SQL Server表分区删除详情的文章就介绍到这了,更多相关SQL Server表分区删除内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

SQL Server 相关文章推荐
SQL Server连接查询的实用教程
Apr 07 SQL Server
在 SQL 语句中处理 NULL 值的方法
Jun 07 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
通过T-SQL语句创建游标与实现数据库加解密功能
Mar 16 SQL Server
SQL Server数据库查询出现阻塞之性能调优
Apr 10 SQL Server
Sql Server 行数据的某列值想作为字段列显示的方法
Apr 20 SQL Server
SQL Server中的逻辑函数介绍
May 25 SQL Server
SQL使用复合索引实现数据库查询的优化
May 25 SQL Server
SQL Server2019安装的详细步骤实战记录(亲测可用)
Jun 10 SQL Server
一次SQL查询优化原理分析(900W+数据从17s到300ms)
Jun 10 SQL Server
SQL Server数据库备份和恢复数据库的全过程
Jun 14 SQL Server
SQL bool盲注和时间盲注详解
Jul 23 SQL Server
Spark SQL 2.4.8 操作 Dataframe的两种方式
Windows环境下实现批量执行Sql文件
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 #SQL Server
sql server删除前1000行数据的方法实例
Aug 30 #SQL Server
SQLServer之常用函数总结详解
Aug 30 #SQL Server
SQL写法--行行比较
Aug 23 #SQL Server
SQL语句中JOIN的用法场景分析
You might like
几个php应用技巧
2008/03/27 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
Cookie 小记
2010/04/01 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
Node.js中DNS模块学习总结
2018/02/28 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python中的自省(反射)详解
2015/06/02 Python
Python遍历numpy数组的实例
2018/04/04 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
问卷调查计划书
2014/01/10 职场文书
高中运动会入场词
2014/02/14 职场文书
促销活动总结报告
2014/04/26 职场文书
中层干部培训方案
2014/06/16 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2014年终个人工作总结
2014/11/07 职场文书
邀请函范文
2015/02/02 职场文书
详细总结Python常见的安全问题
2021/05/21 Python