热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » MySQL/MSSQL编程 » SQL Server 2005数据库分区数据的移入和移出

SQL Server 2005数据库分区数据的移入和移出

论坛链接
  • SQL Server 2005数据库分区数据的移入和移出
  • 发布时间:2008-01-14 12:42:21    浏览数:6519    发布者:tznktg    设置字体【   
处理大数据集或者是“历史悠久”的数据集一个比较麻烦的问题就是有时需要往数据库表插入或者删除大量的数据。一般都是通过INSERT和DELETE语句或者视图来完成数据的插入和删除,不过有了SQL Server 2005数据分区,这个工作就简单了很多,可以使用SWITCH操作符可以轻松地在分区进行数据移入和移出。请问专家具体如何实现?

  专家解答:

  如果你已经知道如果在SQL Server 2005里建立数据分区,那么现在可以进一步了解如何使用SWITCH操作符在分区里控制数据操作。下面我们通过举例来说明。

  我们先来一个简单的例子。下面第一组代码创建分区函数和分区方案,并把新建的分区方案应用到新建表"partTable"中。

以下是引用片段:
  -- create partition function
  CREATE PARTITION FUNCTION partRange1 (INT)
  AS RANGE LEFT FOR VALUES (10, 20, 30) ;
  GO
  -- create partition scheme
  CREATE PARTITION SCHEME partScheme1
  AS PARTITION partRange1
  ALL TO ([PRIMARY]) ;
  GO
  -- create table that uses this partitioning scheme
  CREATE TABLE partTable (col1 INT, col2 VARCHAR(20))
  ON partScheme1 (col1) ;
  GO


  接着我们可以运行以下命令来看看分区创建得如何。

以下是引用片段:
  SELECT *
  FROM sys.partitions
  WHERE OBJECT_ID = OBJECT_ID('partTable')




  现在分区已经建立好了,可以试着插入新的数据,然后选择数据,看看表里显示有什么数据。

以下是引用片段:
  -- insert some sample data
  INSERT INTO partTable (col1, col2) VALUES (5, 'partTable')
  INSERT INTO partTable (col1, col2) VALUES (6, 'partTable')
  INSERT INTO partTable (col1, col2) VALUES (7, 'partTable')
  -- select the data
  SELECT * FROM partTable


  插入数据

  我们现在来尝试把另外一个表里的数据转移到经分区的表里。首先我们需要创建一个新表,命名为"newPartTable",这个新建表跟分区的表有同样的分区方案,但是我们还是需要在"col1"创建CHECK约束,使数据导入匹配的分区表里。这些数据最后会被导入到分区表的第4分区里。因此我们要确保CHECK约束要跟分区函数的创建相匹配。另外,我们还需要指明该值不能为NULL。如下所示:

  col1 INT CHECK (col1 > 30 AND col1 <= 40 AND col1 IS NOT NULL

  创建完表之后我们插入一些数据,然后再select已插入的数据。
       -- switch in
  CREATE TABLE newPartTable (col1 INT CHECK (col1 > 30 AND col1 <= 40 AND col1 IS NOT NULL),
  col2 VARCHAR(20))
  GO
  -- insert some sample data into new table
  INSERT INTO newPartTable (col1, col2) VALUES (31, 'newPartTable')
  INSERT INTO newPartTable (col1, col2) VALUES (32, 'newPartTable')
  INSERT INTO newPartTable (col1, col2) VALUES (33, 'newPartTable')
  -- select the data
  SELECT * FROM partTable
  SELECT * FROM newPartTable


  这里我们可以看到partTable和newPartTable两个表的情况。

  下一组命令就是用来转移数据的。我们用ALTER TABLE命令把数据从表newPartTable中把数据转移到分区表的第4分区里。我们选择第4分区是因为我们插入col1的值需要匹配分区函数的设置。完成数据的移植之后,可以输入select data,就会看到newPartTable的全部数据都移到了partTable里。而且表newPartTable在数据移出后依然存在。


  -- make the switch
  ALTER TABLE newPartTable SWITCH TO partTable PARTITION 4;
  GO
  -- select the data
  SELECT * FROM partTable
  SELECT * FROM newPartTable




  数据移出

  反过来,有时候我们也需要从数据库的分区表里把数据转移到别的表里。那要怎么做呢?首先我们来创建一个名为"nonPartTable"的表,分区方案同上。注意,这个表中的列只含有基本的信息,不需要创建CHECK约束。

  创建新表后,我们还是使用ALTER TABLE命令来把第1分区里的"partTable"表中的数据转移到新建表"nonPartTable"中。第1分区里的数据是所有"col1"值小于10的条目。

  转移数据之后,我们来执行select the data命令。

以下是引用片段:
  -- switch out
  CREATE TABLE nonPartTable (col1 INT, col2 VARCHAR(20))
  ON [primary] ;
  GO
  -- make the switch
  ALTER TABLE partTable SWITCH PARTITION 1 TO nonPartTable ;
  GO
  -- select the data
  SELECT * FROM partTable
  SELECT * FROM nonPartTable


  从下图可以看到,partTable里的数据已经转移到了表nonPartTable里。



  现在我们了解到数据分区功能对于移动和维护大量数据集有很大的作用。不过最后要说的是,虽然这个功能看起来很简单,但是在实施数据分区方案之前还要考虑很多因素。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理