Powershell没有脚本过滤索引

时间:2012-01-02 12:23:52

标签: sql-server-2008 powershell

我正在尝试使用powershell将我的数据库定义(表,索引,触发器......)编写为.sql文件。到目前为止,它运作良好。

最近我们开始在SQL Server 2008数据库中使用过滤索引。这些索引是在没有WHERE子句的情况下编写的。

如果我尝试在MS SQL Server Management Studio中生成脚本

使用“右键单击索引 - 脚本作为 - 创建索引”或“任务 - 生成脚本”

它正在运作。

我在这里阅读了一些有关过滤索引的错误报告https://sqlblog.org/2011/05/16/connect-digest-2011-05-16,但我不确定它们是否适用于我的问题。

任何建议?

1 个答案:

答案 0 :(得分: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]