在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里。具体的分区方式为:

第1个小表:2010-1-1以前的数据(不包含2010-1-1)。

第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。

第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。

第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。

第5个小表:2013-1-1(包含2013-1-1)之后的数据。

分区函数的代码如下所示:

[c-sharp] view plaincopyprint?
  1. CREATE PARTITION FUNCTION partfunSale (datetime)  AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')

CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')

假设我们在创建分区表之后发现,2010年以前的数据并不多,完全可以将它们与2010年的数据进行合并,放在同一个分区里,也就是说,具体的分区方式改为:

第1个小表:2011-1-1以前的数据(不包含2011-1-1)。

第2个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。

第3个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。

第4个小表:2013-1-1(包含2013-1-1)之后的数据。

由于上面的需求更改了数据分区的条件,因此,我们必须要修改分区函数,因为分区函数的作用就是要来告诉SQL Server怎么存放数据的。只要分区函数修改了,SQL Server会自动将数据重新分配,按照新的分区函数指定的方式来存储数据。

先假设我们还没有创建过分区表,要满足上面的条件,我们必须要写出如下代码的创建分区函数的SQL语句

[c-sharp] view plaincopyprint?
  1. CREATE PARTITION FUNCTION partfunSale (datetime)
  2. AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101')

CREATE PARTITION FUNCTION partfunSale (datetime) AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101')

比较一个新的分区函数和老的分区函数,看看他们有什么区别?

的确,我们很容易就可以发现,老的分区函数里多了一个分界值——也就是'20100101'。那么,修改老的分区函数,事实上就是将这分界值删除。简单一点说,删除(合并)一个分区,事实上就是在分区函数中将多余的分界值删除。

删除分区函数中的分界值,也就是修改分区函数的方法如下所示:

[c-sharp] view plaincopyprint?
  1. ALTER PARTITION FUNCTION partfunSale()
  2. MERGE RANGE ('20100101')

ALTER PARTITION FUNCTION partfunSale() MERGE RANGE ('20100101')

其中:

1、ALTER PARTITION FUNCTION 意思是修改分区函数

2、partfunSale()为分区函数名

3、MERGE RANGE意思是合并界限。事实上,合并界限和删除分界值是一个意思。

我们可以在修改分区函数时先统计一下各物理分区中的记录总数,在修改分区之后,再统计一下各物理分区中的记录总数,看一下修改分区函数后的数据变化情况,代码如下所示:

[c-sharp] view plaincopyprint?
  1. --统计所有分区表中的记录总数
  2. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
  3. --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中
  4. --现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2个分区表中的数据合并
  5. --修改分区函数
  6. ALTER PARTITION FUNCTION partfunSale()
  7. MERGE RANGE ('20100101')
  8. --统计所有分区表中的记录总数
  9. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)

--统计所有分区表中的记录总数 select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime) --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中 --现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2个分区表中的数据合并 --修改分区函数 ALTER PARTITION FUNCTION partfunSale() MERGE RANGE ('20100101') --统计所有分区表中的记录总数 select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)

运行结果如下图所示:

现在还有一个问题,就是通过修改分区函数合并数据之后,数据都存放在哪里了?在修改之前,数据分别存放在文件组Sale2009和Sale2010中,修改之后,数据放到哪里去了呢?

事实上,在修改分区函数之后,SQL Server也会自动修改分区方案,将处于两个物理分区中的数据放在同一个物理分区里了。可以通过查看分区方案的方式来查看数据具体的存放位置。

查看分区方案的方式为:在SQL Server Management Studio中,选择数据库-->存储-->分区方案,右击分区方案名,在弹出的菜单中选择“编写分区方案脚本为”-->CREATE到-->新查询编辑器窗口

然后在新查询编辑器窗口可以看到下图代码。

从上图中可以看出,分区方案将原来Sale2010文件组中的数据合并到了Sale2009文件组中。

原创不容易,转载请注明出处。http://blog.csdn.net/smallfools/archive/2009/12/04/4937878.aspx

相关链接:

SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?

SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据

SQL Server 2005中的分区表(三):将普通表转换成分区表

SQL Server 2005中的分区表(四):删除(合并)一个分区

SQL Server 2005中的分区表(五):添加一个分区

SQL Server 2005中的分区表(六):将已分区表转换成普通表

转载于:https://www.cnblogs.com/alianhot/archive/2012/03/21/2409243.html

SQL Server 2005中的分区表(四):删除(合并)一个分区相关推荐

  1. SQL Server 2005中的分区表

    SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表? SQL Server 2005中的分区表(二):如何添加.查询.修改分区表中的数据 SQL Serve ...

  2. SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?

    如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了. 1.数据库中某个表中的数据很多.很多是什么概念?一万条?两万条?还是十万条.一百万条?这个,我觉得是仁者见仁.智者见智的 ...

  3. SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...

    如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了. 1.数据库中某个表中的数据很多.很多是什么概念?一万条?两万条?还是十万条.一百万条?这个,我觉得是仁者见仁.智者见智的 ...

  4. 如何在SQL Server 2005中使用作业实现备份和特定删除

    步骤如下:   1.需要启动服务Sql Server Agent(sql server 代理)   2.新建作业,名称为backupDatabase   3.选择步骤,点击"新建" ...

  5. SQL Server 2005 中的商务智能和数据仓库

    微软发布了SQL Server 2005,对于微软与BI来说这是一个非常重要的版本,它完善了微软在BI方面的产品线.SQL Server 2005以及 Visual Studio .net2005的整 ...

  6. sql server 2005 中的同义词

    在SQL SERVER 2005中,终于出现了同义词了,大大方便了使用. 同义词是用来实现下列用途的数据库对象: 为本地或远程服务器上的另一个数据库对象(称为"基对象")提供备选名 ...

  7. 浅析SQL Server 2005中的主动式通知机制

    一.引言 在开发多人同时访问的Web应用程序(其实不只这类程序)时,开发人员往往会在缓存策略的设计上狠下功夫.这是因为,如果将这种环境下不常变更的数据临时存放在应用程序服务器或是用户机器上的话,可以避 ...

  8. SQL Server 2005中的ROW_NUMBER和RANK

    下面介绍两个SQL Server 2005 中的新东东: ROW_NUMBER 返回结果集分区内行的序列号,每个分区的第一行从 1 开始. 语法: ROW_NUMBER ( )     OVER ( ...

  9. SQL Server 2005中设置Reporting Services发布web报表的匿名访问

    第一步:在运行IIS的Web服务器的本地访问http://localhost/reports ,这是Reporting Services的管理站点,在Properties(属性)页面下添加一个只有Br ...

最新文章

  1. benke计算机课程设计,(本科课程设计.doc
  2. MySQL性能优化、故障排查及最佳实践秘籍,阿里云数据库专家玄惭的“武功”全记录...
  3. PostgreSQL SystemTap on Linux 转
  4. android final函数,Android 回调函数 解析问题
  5. DSP学习 -- C语言实现MySQL数据库操作
  6. c语言文件打开函数,C语言fopen函数中文件打开方式(参数值)
  7. 通过案例学调优之--和 LOG BUFFER 相关的主要 Latch
  8. OpencV使用fitEllipse拟合椭圆后,获取椭圆参数
  9. layer 日期laydate年月日切换渲染
  10. SSIM(结构相似性)-数学公式及python实现
  11. html视频自动全屏代码,HTML5轻松实现全屏视频背景的示例
  12. 【STC8A8K64D4开发板】——开发板程序下载
  13. 【Python】Python 仿真OFDM发射机、信道和接收机-实现多种调制方式
  14. 【微服务】分布式如何利用Skywalking实现链路追踪与监控?
  15. 50种网络故障及解决方法
  16. 转载一些值得收藏的文章
  17. Harrison Consoles 软件促销
  18. BRVAH__优秀的RecyclerView框架
  19. CAS单点登录(五)——Service配置及管理
  20. HS5104红外遥控芯片应用

热门文章

  1. 基于卷积神经网络的手写数字识别、python实现
  2. 两数的和与差的简单函数
  3. 震惊! Leftmost Digit
  4. mysql timestamp排序_对多个表进行排序MYSQL TimeStamp
  5. html万花筒照片代码,怎样拍出万花筒效果
  6. java udp 协议_网络协议 - UDP 协议详解
  7. react全局方法_前端面试题 ---react
  8. ajax 直接向后台发送请求,通过ajax异步向后端发送请求,响应请求向前端传送json格式数据的实现思路...
  9. Mysql 零距离-入门(五)操作数据表
  10. Java 文件重命名