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 SERVER中常用日期函数的具体使用
Apr 08 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
SQL Server的存储过程与触发器以及系统函数和自定义函数
Apr 10 SQL Server
如何使用SQL Server语句创建表
Apr 12 SQL Server
SQLServer权限之只开启创建表权限
Apr 12 SQL Server
SQL SERVER中的流程控制语句
May 25 SQL Server
SQL Server使用PIVOT与unPIVOT实现行列转换
May 25 SQL Server
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
May 25 SQL Server
详解SQL报错盲注
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
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
python安装与使用redis的方法
2016/04/19 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
Python实现结构体代码实例
2020/02/10 Python
numpy实现RNN原理实现
2021/03/02 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
联想C++笔试题
2012/06/13 面试题
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
《白鹅》教学反思
2014/04/13 职场文书
党员志愿者活动方案
2014/08/28 职场文书
社区服务活动报告
2015/02/05 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书