パーティション関数に1つだけではなく2つの列を使用してテーブルをパーティション化することは可能ですか?
3列のテーブルを考えてみましょう
ID(int、主キー、 日付(datetime)、 Num(int)
このテーブルをDate
とNum
の2列で分割したいと思います。
これは、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
Bad News:パーティション関数は単一の列で定義する必要があります。
グッドニュース:その単一の列は 永続的な計算列 になる可能性があります=これは、2つの列を組み合わせたものですパーティション。
私はこれがより簡単な解決策であることを発見しました
select ROW_NUMBER() over (partition by CHECKSUM(value,ID) order by SortOrder) as Row From your_table
本来、SQL Serverの2つの列でパーティション化することはできません。
できることはいくつかあります。各値がどの任意整数(パーティション)であるかを抽出するために使用するルックアップテーブルを用意しますが、最大パーティション数は1000だけなので、同じスペースを占有し始めます。計算された列のアプローチには、これと同じ問題があり、1kのパーティション制限があり、それを超える可能性があります。
私はおそらく日付のパーティションに固執し、月の最後の部分ではなく、月の最初の日に範囲を設定します。
2番目のパーティション値から何を得るつもりですか?