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——索引+基于单表的数据插入与简单查询【1】
Apr 05 SQL Server
Sql-Server数据库单表查询 4.3实验课
Apr 05 SQL Server
如何有效防止sql注入的方法
May 25 SQL Server
sql查询结果列拼接成逗号分隔的字符串方法
May 25 SQL Server
解决sql server 数据库,sa用户被锁定的问题
Jun 11 SQL Server
SQLServer中JSON文档型数据的查询问题解决
Jun 27 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
sqlserver连接错误之SQL评估期已过的问题解决
Mar 23 SQL Server
SQL Server内存机制浅探
Apr 06 SQL Server
Sql Server 行数据的某列值想作为字段列显示的方法
Apr 20 SQL Server
SQL Server中搜索特定的对象
May 25 SQL Server
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
May 25 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实现的Captcha验证码类实例
2014/09/22 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
js实现自定义路由
2017/02/04 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
餐饮业的创业计划书范文
2013/12/26 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
三八节主持词
2014/03/17 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
考察现实表现材料
2014/05/19 职场文书
精神文明建设标语
2014/06/16 职场文书
公司合并协议书范本
2014/09/30 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技