是否可以使用2列对表进行分区而不是仅使用1作为分区函数?
考虑一个包含3列的表
ID (int, primary key, Date (datetime), Num (int)
我想将此表分为2列:Date
和Num
。
这是我使用1列(日期)对表进行分区的方法:
create PARTITION FUNCTION PFN_MonthRange (datetime)
AS
RANGE left FOR VALUES ('2009-11-30 23:59:59:997',
'2009-12-31 23:59:59:997',
'2010-01-31 23:59:59:997',
'2010-28-02 23:59:59:997',
'2010-03-31 23:59:59:997')
go
答案 0 :(得分:40)
坏消息:必须在单个列上定义分区功能。
好消息:这一列可能是persisted computed column,它是您尝试分区的两列的组合。
答案 1 :(得分:14)
我发现这是一个更容易的解决方案
select ROW_NUMBER() over (partition by CHECKSUM(value,ID) order by SortOrder) as Row From your_table
答案 2 :(得分:3)
本机地,您无法在SQL Server中按两列进行分区。
你可以做一些事情,有一个查找表,你用它来提取每个值在哪个仲裁整数(分区),但你最多只有1000个分区,所以他们将开始占用相同的空间。计算列方法遇到同样的问题,你有一个1k的分区限制,很可能你会打击它。
我可能只是坚持一个日期分区,并且在该月的第一天正确范围,而不是在该月的最后一部分左侧。
您打算从第二个分区值获得什么?