SQL Server表分区删除详情

 更新时间:2021年10月15日 16:54:33   作者:缥缈的尘埃  
这篇文章主要介绍了SQL Server表分区删除,删除分区又称为合并分区,简单地讲就是将多个分区的数据进行合并。现以表Sales.SalesOrderHeader作为示例,演示如何进行表分区删除。下面就和小编一起进入文章学习该内容吧

一、引言

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

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

二、演示

2.1、数据查询

2.1.1、 查看分区元数据

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

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点击"右键"->"设计"。

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

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

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表分区删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用linux CentOS本地部署SQL Server数据库超详细步骤

    使用linux CentOS本地部署SQL Server数据库超详细步骤

    作为一名Linux爱好者,我们在使用Linux系统的时候,经常需要使用到数据库,下面这篇文章主要给大家介绍了关于使用linux CentOS本地部署SQL Server数据库的超详细步骤,需要的朋友可以参考下
    2024-01-01
  • SQL Server内存遭遇操作系统进程压榨案例分析

    SQL Server内存遭遇操作系统进程压榨案例分析

    最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁
    2014-03-03
  • sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    mssql在使用多库查询的时候会用到链接服务器,以下为链接服务器的添加方法,添加完了即可实现任意改服务器的多库查询了
    2011-08-08
  • SQL Server基础教程之游标(Cursor)

    SQL Server基础教程之游标(Cursor)

    这篇文章主要给大家介绍了关于SQL Server基础教程之游标(Cursor)的相关资料,游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行,需要的朋友可以参考下
    2023-11-11
  • SQL SERVER实现连接与合并查询

    SQL SERVER实现连接与合并查询

    本文详细讲解了SQL SERVER实现连接与合并查询的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • SQL 特殊状态“未知“以及“空值NULL“的判断

    SQL 特殊状态“未知“以及“空值NULL“的判断

    Null值是SQL中的一个特殊值,表示缺少值或未知值,还有未知(UNKNOWN),表示无法判断出真或者假,本文主要介绍了SQL 特殊状态“未知“以及“空值NULL“的判断,感兴趣的可以了解一下
    2023-11-11
  • SQL语句的执行原理分析

    SQL语句的执行原理分析

    SQL语句的执行原理分析,想提高执行效率的朋友可以参考下。
    2012-01-01
  • SQL Server连接失败错误及解决

    SQL Server连接失败错误及解决

    SQL Server连接失败错误及解决...
    2007-01-01
  • sql中的regexp与like区别实现

    sql中的regexp与like区别实现

    本文详细介绍了正则表达式REGEXP和LIKE语句的用途,使用它们进行模式匹配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • 一文详解如何远程连接SQLServer数据库

    一文详解如何远程连接SQLServer数据库

    sql server是一款数据库管理工具,其中有非常多实用的功能可以帮助用户完成数据库的管理操作,也有一些用户在操作这款软件的时候会需要用到远程连接功能,这篇文章主要给大家介绍了关于如何远程连接SQLServer数据库的相关资料,需要的朋友可以参考下
    2023-10-10

最新评论