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 05 SQL Server
SQL Server2019数据库之简单子查询的具有方法
Apr 27 SQL Server
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
Jun 30 SQL Server
SQL写法--行行比较
Aug 23 SQL Server
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 SQL Server
SQL Server远程连接的设置步骤(图文)
Mar 23 SQL Server
SQL Server的存储过程与触发器以及系统函数和自定义函数
Apr 10 SQL Server
Sql Server 行数据的某列值想作为字段列显示的方法
Apr 20 SQL Server
SQL Server 中的事务介绍
May 20 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 Hex RGB颜色值互换的使用
2013/05/10 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
Javascript 编码约定(编码规范)
2018/03/11 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
python实现在线翻译功能
2020/03/03 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
自我评价怎么写正确呢?
2013/12/02 职场文书
销售经理竞聘书
2014/03/31 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
netty 实现tomcat的示例代码
2022/06/05 Servers