1

我是否可以在一个范围内指定从 GETDATE() 开始在 CreatedDate 列中具有值的所有行都应该放在一个分区中,其余的放在另一个分区中,以便我应该查询第二个分区的最新数据和第一个归档的数据数据?

4

1 回答 1

5

不,你不能。分区函数必须是确定性的。每当使用一组特定的输入值调用确定性函数时,它们总是返回相同的结果。 不幸的是,GetDate()是非确定性函数。 不幸的是,您不能使用GetDate(),因为GetDate()它是不确定的函数。

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

@Ismail 还有其他选择:

创建位列 LastMonth 和基于 LastMonth 列的分区函数。在开始使用数据之前,您需要每天更新字段。您不需要每天都这样做,也许是更好的方法来更新您选择标记数据(或更改分区函数)的列,在您选择的时间段(周/月/季度)内进行一次。我不尝试这种方法,您可能需要在更新列后开始对表进行一些维护以获得完整的性能。

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

于 2011-02-28T10:12:04.933 回答