2012-01-02 70 views
0

我試圖腳本我的數據庫定義(表,索引,觸發器,...)使用PowerShell成.sql文件。直到現在它運行良好。PowerShell的犯規腳本過濾索引

最近,我們開始在我們的SQL Server 2008數據庫使用過濾索引。這些索引是沒有WHERE子句的腳本。

如果我嘗試生成中的MS SQL Server Management Studio中

與任何腳本「的指數點右鍵 - 腳本 - 創建指數」 - 這是工作

或「生成腳本任務」 。

我讀過關於這裏http://sqlblog.com/blogs/aaron_bertrand/archive/2011/05/16/connect-digest-2011-05-16.aspx過濾索引的幾個bug報告,但我不知道我它們適用於我的問題。

有什麼建議嗎?

回答

0

腳本過濾索引爲我工作得很好。下面是一些測試代碼,你可以嘗試:

創建一個使用Adventworks篩選的索引(從BOL爲例):

USE AdventureWorks2008R2; 
GO 
IF EXISTS (SELECT name FROM sys.indexes 
    WHERE name = N'FIBillOfMaterialsWithEndDate' 
    AND object_id = OBJECT_ID(N'Production.BillOfMaterials')) 
DROP INDEX FIBillOfMaterialsWithEndDate 
    ON Production.BillOfMaterials; 
GO 
CREATE NONCLUSTERED INDEX "FIBillOfMaterialsWithEndDate" 
    ON Production.BillOfMaterials (ComponentID, StartDate) 
    WHERE EndDate IS NOT NULL; 
GO 

使用SQLPS導航到Production.BillOfMaterials表的索引容器:

cd SQLSERVER:\SQL\WIN7BOOT\SQL1\Databases\AdventureWorks\Tables\Production.BillOfMaterials\indexes 

獲取FIBillOfMaterialsWithEndDate指數和腳本是:

get-item FIBillOfMaterialsWithEndDate | foreach {$_.script()}; 
CREATE NONCLUSTERED INDEX [FIBillOfMaterialsWithEndDate] ON [Production].[BillOfMaterials] 
(
     [ComponentID] ASC, 
     [StartDate] ASC 
) 
WHERE ([EndDate] IS NOT NULL) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, 
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]