我想創建上(列1 =列2)的條件下篩選索引:創建篩選索引
CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced]
ON [ACC].[Document] ([DocumentID] ASC)
WHERE SumCredit = SumDebit
ON [PRIMARY]
GO
錯誤信息是:
關鍵字附近的語法不正確'與'
我想創建上(列1 =列2)的條件下篩選索引:創建篩選索引
CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced]
ON [ACC].[Document] ([DocumentID] ASC)
WHERE SumCredit = SumDebit
ON [PRIMARY]
GO
錯誤信息是:
關鍵字附近的語法不正確'與'
的文檔是在這個問題上相當混亂,但你真的不能創建過濾在此條件下(因爲它不能在過濾的統計信息使用)的索引。
的文檔說:
過濾器謂詞使用簡單的比較邏輯
沒有明確定義的「簡單」,但實際上「簡單」是指「經濾波的統計可用」。這兩者有相同的限制。
統計信息只能使用equalities,ranges和in-lists agains常量。這意味着你只能使用下面的謂詞:
column = const
column > const
column < const
column IN (const1, const1)
及其變化(BETWEEN
等),可能與AND
(甚至沒有OR
)相結合。
我已成功使用!=在篩選索引上。 – Brandon
篩選索引是SQL Server 2012功能 - 這裏是來自MSDN的documentation的語法
例如:
CREATE NONCLUSTERED INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL ;
GO
不,不,在SQL Server ** 2008中引入了過濾索引**我的朋友.. 。 - 請參閱您自己的MSDN文檔:http://msdn.microsoft.com/en-us/library/cc280372%28v=sql.100%29.aspx –
請發表你正在發佈的聲明 – Quassnoi
另外:你可以在你的過濾索引表達式中有一個* simple *檢查 - 就像'WHERE Column1 IS NOT NULL'或類似的東西。你**不能**但是比較兩列值 - 你將得到一個錯誤消息'Msg 10735,Level 15,State 1,Line 2 表'dbo.XXXXXXX'上的過濾索引'ix_test'的WHERE子句不正確。' –
My T-SQL命令是:CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced] ON [ACC] [文獻]([DocumentID] ASC) WHERE SumCredit = SumDebit ON [PRIMARY] GO –