代码之家  ›  专栏  ›  技术社区  ›  Cerin

为现有索引生成T-SQL

  •  2
  • Cerin  · 技术社区  · 15 年前

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

    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 回复  |  直到 15 年前
        1
  •  2
  •   Daniel DiPaolo    15 年前

    假设您有2005或更高版本,您可以简单地查询 sys.indexes 你需要的所有信息(就像他们在 IF NOT EXISTS 查询的一部分)。

    如果您只是在数据库中查找所有索引,只需从该数据库中的表中提取所有内容。如果要查找符合特定条件的索引 here's the list of fields in sys.indexes 你可以用来过滤。这个 sys.index_columns 表还具有每个索引的所有关联列。

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

    This blog post 有一个非常好的SQL片段,它使用这些技巧来查询数据库中的索引,并且您可以使用其中的一部分来执行您想要的操作。

        2
  •  3
  •   SQLMenace    15 年前

    用T-SQL生成它是一个噩梦。如果你愿意使用SMO和C,那么看看 SMO Script Index and FK's on a database

    甚至可以从PowerShell调用SMO,这样可能是另一个选项。