我正在尝试使用powershell将我的数据库定义(表,索引,触发器......)编写为.sql文件。到目前为止,它运作良好。
最近我们开始在SQL Server 2008数据库中使用过滤索引。这些索引是在没有WHERE子句的情况下编写的。
如果我尝试在MS SQL Server Management Studio中生成脚本
使用“右键单击索引 - 脚本作为 - 创建索引”或“任务 - 生成脚本”
它正在运作。
我在这里阅读了一些有关过滤索引的错误报告https://sqlblog.org/2011/05/16/connect-digest-2011-05-16,但我不确定它们是否适用于我的问题。
任何建议?
答案 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]