如何以编程方式为数据库中的现有索引生成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)进行此操作?
答案 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代码段,它使用这些技巧来查询数据库中的索引,你可以使用它来做你想做的事情。