为现有索引生成T-SQL

时间:2010-06-10 20:57:49

标签: sql tsql

如何以编程方式为数据库中的现有索引生成T-SQL CREATE语句? SQL Studio提供了“脚本索引as->创建到”命令,该命令以以下形式生成代码:

IF NOT EXISTS(SELECT * FROM sys.indexes WHERE name = N'IX_myindex')
    CREATE NONCLUSTERED INDEX [IX_myindex] ON [dbo].[mytable] 
    (
        [my_id] ASC
    )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
GO

你将如何以编程方式(理想情况下通过Python)进行此操作?

2 个答案:

答案 0 :(得分:3)

使用T-SQL生成它是一场噩梦。如果您愿意使用SMO和c#,请查看SMO Script Index and FK's on a database

您甚至可以从PowerShell调用SMO,这可能是另一种选择。

答案 1 :(得分:2)

假设你有2005或更高版本,你只需查询sys.indexes即可获得所需的所有信息(就像他们在查询的IF NOT EXISTS部分中所做的那样)。

如果您只是在数据库中查找所有索引,只需从该数据库中的该表中提取所有内容。如果您正在查找符合某些条件here's the list of fields in sys.indexes的索引,可以使用这些索引进行筛选。 sys.index_columns表也包含每个索引的所有关联列。

使用此功能,您应该能够获得有关数据库中索引的所有信息。

This blog post有一个非常好的SQL代码段,它使用这些技巧来查询数据库中的索引,你可以使用它来做你想做的事情。