当前位置:Gxlcms > 数据库问题 > SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据

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

时间:2021-07-01 10:21:17 帮助过:19人阅读

 
  1. select * from Sale  

 

 

    查询的结果如下图所示:

技术分享

    从上面两个步骤中,根本就感觉不到数据是分别存放在几个不同的物理表中,因为在逻辑上,这些数据都属于同一个数据表。如果你非想知道哪条记录是放在哪个物理上的分区表中,那么就必须使用到$PARTITION函数,这个函数的可以调用分区函数,并返回数据所在物理分区的编号。

    说起来有点难懂,不过用起来很简单。$PARTITION的语法是:

    $PARTITION.分区函数名(表达式)

    假设,你想知道2010年10月1日的数据会放在哪个物理分区表中,你就可以使用以下语句来查看。

 

[c-sharp] view plain copy  
  1. select $PARTITION.partfunSale (‘2010-10-1‘)  

 

 

    在以上语句中,partfunSale()为分区函数名,括号中的表达式必须是日期型的数据或可以隐式转换成日期型的数据,如果要问我为什么,那么就回想一个怎么定义分区函数的吧(CREATE PARTITION FUNCTION partfunSale (datetime))。在定义partfunSale()函数时,指定了参数为日期型,所以括号中的表达式必须是日期型或可以隐式转换成日期型的数据。以上代码的运行结果如下图所示:

技术分享

    在该图中可以看出,分区函数返回的结果为2,也就是说,2010年10月1日的数据会放在第2个物理分区表中。

 

    再进一步考虑,如果想具体知道每个物理分区表中存放了哪些记录,也可以使用$PARTITION函数。因为$PARTITION函数可以得到物理分区表的编号,那么只要将$PARTITION.partfunSale(SaleTime)做为where的条件使用即可,如以下代码 所示:

 

[c-sharp] view plain copy  
  1. select * from Sale where $PARTITION.partfunSale(SaleTime)=1  
  2. select * from Sale where $PARTITION.partfunSale(SaleTime)=2  
  3. select * from Sale where $PARTITION.partfunSale(SaleTime)=3  
  4. select * from Sale where $PARTITION.partfunSale(SaleTime)=4  
  5. select * from Sale where $PARTITION.partfunSale(SaleTime)=5  

 

 

    以上代码的运行结果如下图所示:

技术分享

    从上图中我们可以看到每个分区表中的数据记录情况——和我们插入时设置的情况完全一致。同理可得,如果要统计每个物理分区表中的记录数,可以使用如下代码:

 

[c-sharp] view plain copy  
  1. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  

 

 

    以上代码的运行结果如下图所示:

技术分享

 

    除了在插入数据时程序员不需要去考虑分区表的物理情况之外,就是连修改数据也不需要考虑。SQL Server会自动将记录从一个分区表移到另一个分区表中,如以下代码所示:

 

[c-sharp] view plain copy  
  1. --统计所有分区表中的记录总数  
  2. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  
  3. --修改编号为1的记录,将时间改为2019年1月1日  
  4. update Sale set SaleTime=‘2019-1-1‘ where id=1  
  5. --重新统计所有分区表中的记录总数  
  6. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  

 

 

    在以上代码中,程序员将其中一条数据的时间改变了,从分区函数中可以得知,这条记录应该从第一个分区表移到第五个分区表中,如下图所示。而整个操作过程,程序员是完全不需要干预的。

技术分享

 

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

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

标签:.net   key   try   操作   article   highlight   日期   时间   tools   

人气教程排行