2012-05-02 48 views
0

我正在使用SQL Server 2008 R2。我正在嘗試一些分區的東西,並有一些問題。使用用戶定義函數的分區模式

這裏是一個非常簡單的例子:

CREATE PARTITION FUNCTION MyPartitionFunction (int) 
AS RANGE LEFT FOR VALUES (1,2) 

CREATE PARTITION SCHEME MyPartitionScheme AS 
PARTITION MyPartitionFunction ALL TO ([PRIMARY]) 

CREATE FUNCTION CalcPartitionValue (@value int) RETURNS int 
WITH SCHEMABINDING AS 
BEGIN 
    if @value % 2 = 0 return 1 
    return 2 
END 

CREATE TABLE MyTable 
(ID INT NOT NULL) 
ON MyPartitionScheme (dbo.CalcPartitionValue(ID)); 

我要使用的用戶定義的函數作爲分區功能輸入。有什麼辦法可以使這個工作?

我知道可以用用戶定義的函數創建一個計算列。但是,超過3億行的表上的模式更新不會那麼快。這就是爲什麼我問是否可以直接使用用戶定義的功能。

回答

1

嘗試持續計算列並使用函數作爲列公式。 在函數定義中使用「使用Schemabinding」選項,它將一切正常。