SQL Server 2008 中的分区表(二):如何添加、查询 (1)
假设,你想知道 2010 年 10 月 1 日的数据会放在哪个物理分区表中,你就可以使用以下语句来查看。
[c-sharp]? view plain copy
select?$PARTITION.partfunSale?('2010-10-1')??
在以上语句中,partfunSale()为分区函数名,括号中的表达式必须是日期型的数据或可以隐式转换成日期型的数据,如果要问我为什么,那么就回想一个怎么定义分区函数的吧(CREATE?PARTITION?FUNCTION?partfunSale?(datetime))。在定义 partfunSale()函数时,指定了参数为日期型,所以括号中的表达式必须是日期型或可以隐式转换成日期型的数据。以上代码的运行结果如下图所示:
在该图中可以看出,分区函数返回的结果为 2,也就是说,2010 年 10 月 1 日的数据会放在第 2 个物理分区表中。
再进一步考虑,如果想具体知道每个物理分区表中存放了哪些记录,也可以使用PARTITION 函数可以得到物理分区表的编号,那么只要将 $PARTITION.partfunSale(SaleTime)做为 where 的条件使用即可,如以下代码 所示:
[c-sharp]? view plain copy
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=1??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=2??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=3??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=4??
select?*?from?Sale?where?$PARTITION.partfunSale(SaleTime)=5??
以上代码的运行结果如下图所示:
![](https://p-bl
og.csdn.net/images/p_blog_csdn_net/smallfools/EntryImages/20091203/7.jpg)
从上图中我们可以看到每个分区表中的数据记录情况——和我们插入时设置的情况完全一致。同理可得,如果要统计每个物理分区表中的记录数,可以使用如下代码:
[c-sharp]? view plain copy
select?PARTITION.partfunSale(SaleTime)??
以上代码的运行结果如下图所示:
除了在插入数据时程序员不需要去考虑分区表的物理情况之外,就是连修改数据也不需要考虑。SQL Server 会自动将记录从一个分区表移到另一个分区表中,如以下代码所示:
[c-sharp]? view plain copy
--统计所有分区表中的记录总数??
select?PARTITION.partfunSale(SaleTime)??
--修改编号为 1 的记录,将时间改为 2019 年 1 月 1 日??
update?Sale?set?SaleTime='2019-1-1'?where?id=1??
--重新统计所有分区表中的记录总数??
select?PARTITION.partfunSale(SaleTime)??
在以上代码中,程序员将其中一条数据的时间改变了,从分区函数中可以得知,这条记录应该从第一个分区表移到第五个分区表中,如下图所示。而整个操作过程,程序员是完全不需要干预的。
原创不容易,转载请注明出处。http://blog.csdn.net/smallfools/archive/2009/12/03/4932936.aspx
评论