基于变量值的分区表 - SQL Server 2008

时间:2011-02-28 10:05:40

标签: sql-server sql-server-2008 database-partitioning

我可以在一个范围内指定在GETDATE()中早于一个月的CreatedDate列中具有值的所有行应该放在一个分区中而其余的放在另一个分区中,以便我应该在第二个分区中查询最新数据和第一个分区一个用于存档数据?

1 个答案:

答案 0 :(得分:5)

不,你不能。分区函数必须为deterministic。确定性函数在使用一组特定输入值调用时始终返回相同的结果。 不幸的是,GetDate()是不确定的功能。 很遗憾,您无法使用GetDate(),因为GetDate()是非确定性功能。

有关详细信息,请参阅http://shannonlowder.com/2010/08/partitioning/

@Ismail 还有其他选择:

根据LastMonth列创建位列LastMonth和分区函数。在开始使用数据之前,您需要每天更新字段。您不需要每天都这样做,也许更新的方式来更新您选择标记新鲜数据的列(或更改您的分区功能),在您选择的时间段内(周/月/ 25美分硬币)。 我不尝试这种方法,您可能需要在更新列后在表上启动一些维护以获得完整性能。

可能有效的另一个想法是每个月进行一次分区,并在新月开始时更改文件组。例如,如果你想要关于s:上的快速磁盘f:和历史记录的最新数据,你将在s:上有PartitionJan,在f:上有PartitionFebruary,当martch开始将PartitionFebruary移动到s:时,并开始在f:上使用PartitionMartch。