SQL Server查询分区表

问题描述 投票:0回答:1

有没有办法让使用分区键列,而不是分区编号表的分区中的所有行?

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' 
sql sql-server sql-server-2008-r2
1个回答
0
投票

为了从直接使用分区列,而不是分区功能分区中的所有行,指定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';
© www.soinside.com 2019 - 2024. All rights reserved.