我创建了一个表并对其进行了分区(代码为here,请参阅水平分区示例,并创建新的分区表部分) 我使用了以下分区功能:
CREATE PARTITION FUNCTION [PartitioningByMonth] (datetime)
AS RANGE RIGHT FOR VALUES ('20140201', '20140301', '20140401',
'20140501', '20140601', '20140701', '20140801',
'20140901', '20141001', '20141101', '20141201');
我的SCHEMA :
CREATE PARTITION SCHEME PartitionBymonth
AS PARTITION PartitioningBymonth
TO (January, February, March,
April, May, June, July,
Avgust, September, October,
November, December);
我的表创建查询:
CREATE TABLE Reports
(ReportDate datetime PRIMARY KEY,
MonthlyReport varchar(max))
ON PartitionBymonth (ReportDate);
GO
如果我在 2014
(我的意思是20140105
,20140205
,......)中插入的值,它就有效罚款:
INSERT INTO Reports (ReportDate,MonthlyReport)
SELECT '20140105', 'ReportJanuary' UNION ALL
SELECT '20140205', 'ReportFebryary' UNION ALL
SELECT '20140308', 'ReportMarch' UNION ALL
但是当我插入2015
,2016
,2017
的任何值时会出现问题.....:
INSERT INTO Reports (ReportDate,MonthlyReport)
SELECT '20150105', 'ReportJanuary' UNION ALL
SELECT '20150206', 'ReportFebryary' UNION ALL
SELECT '20150309', 'ReportMarch' UNION ALL
因为它只推送最后一个分区(20141201
我的意思是December
分区)。但我希望他们转到January
,February
,March
分区。
我知道我的问题出在PARTITION FUNCTION
,因为我在2014年只写了(' 20140201',#201; 20140301' ......)。
但是我想计算仅。这有什么办法让它只看到2015年 03 01而不是年或者一个月。(我可以使用SUBSTRING吗?任何部分)
答案 0 :(得分:1)
您可以将计算列添加到表中
ReportDateP as MONTH(ReportDate) PERSISTED
并在此计算列
上创建包含分区的表然后按如下所示创建分区函数
CREATE PARTITION FUNCTION [NewPartitioning] (int)
AS RANGE RIGHT FOR VALUES (2,3,4,5,6,7,8,9,10,11,12);
答案 1 :(得分:0)
您无法在Partions系统中使用SubQuery。使用Eralper方法对此部分进行分区
CREATE PARTITION SCHEME PartitionBymonth
AS PARTITION PartitioningBymonth
TO (January, February, March,
April, May, June, July,
Avgust, September, October,
November, December);