繁体   English   中英

sql server查询分区表

[英]sql server query partitioned table

有没有办法使用分区键列而不是分区号来获取表分区的所有行?

select * from partitioned_table
where $partition.fpartfunction(key_column) = 1

据我所知,以上内容返回了分区1中的所有行。我想知道是否可以做类似的事情:

伪代码:

select * from partitioned_table
    where $partition.get_me_all_rows_in_partition_with_Keycolumn_year = '2019' 

要使用分区列而不是直接使用分区函数从分区中获取所有行,请指定与实际分区边界匹配的WHERE子句。 SQL Server使用范围分区,因此您需要指定下边界值(第一个分区除外)和上边界值(最后一个分区除外)。

下边界谓词必须> RANGE LEFT分区函数,因为分区边界不包括边界值。 相反,下边界谓词需要使用RANGE RIGHT分区函数>= ,因为分区边界不包括边界值。

以下是在date数据类型分区列上进行年度分区的示例。

CREATE PARTITION FUNCTION PF_Date(date) AS RANGE LEFT FOR VALUES('2019-01-01','2020-01-01');

--first partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column <= '2019-01-01';
--second partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column > '2019-01-01' AND key_column <= '2020-01-01';
--last partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column > '2020-01-01';

CREATE PARTITION FUNCTION PF_Date(date) AS RANGE RIGHT FOR VALUES('2019-01-01','2020-01-01');

--first partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column < '2019-01-01';
--second partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column >= '2019-01-01' AND key_column < '2020-01-01';
--last partition
SELECT *
FROM dbo.partitioned_table
WHERE key_column >= '2020-01-01';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM