【问题标题】:Is there a clean T-SQL query I can use to verify an index has the right columns?是否有一个干净的 T-SQL 查询可用于验证索引是否具有正确的列?
【发布时间】:2008-10-23 16:21:50
【问题描述】:

我正在编写一个数据库升级脚本,它将检查索引是否定义了正确的两列。如果没有,或者只有其中一个,那么我将删除它(有没有办法改变索引?)然后用两者重新创建它。

【问题讨论】:

    标签: sql-server tsql indexing


    【解决方案1】:

    我没有立即可用的数据库来测试这一点,但您应该能够通过使用以下 IF EXISTS 语句来查看索引中是否存在列。

    我不确定您是否可以即时更改索引。

    IF EXISTS
    (
       SELECT MyIndex.Name AS IndexName, 
              Columns.name AS ColumnName 
       FROM sys.indexes MyIndex
       INNER JOIN sys.index_columns IndexColumns 
          ON  MyIndex.index_id = IndexColumns.index_id
          AND MyIndex.object_id = IndexColumns.object_id 
       INNER JOIN sys.columns Columns
          ON  Columns.column_id = IndexColumns.column_id 
          AND IndexColumns.object_id = Columns.object_id 
       WHERE Columns.name = 'ColumnName'
       AND MyIndex.Name='IX_MyIndexName'
    )
    

    【讨论】:

      【解决方案2】:

      感谢您的帮助,埃德。这是我使用您的解决方案作为开始编写的解决方案。已经过验证。基本上它有所有正确的连接。

      IF EXISTS ( SELECT i.Name AS IndexName, c.Name AS ColumnName FROM sys.indexes i JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id JOIN sys.columns c ON ic.object_id = c.object_id AND c.column_id = ic.column_id WHERE c.Name = 'MyColumnName' AND i.Name='MyIndexName' )

      【讨论】:

      • 我修复了我的响应以包含其他连接条件。我很高兴我能提供帮助。您可以考虑将您或我的答案标记为正确。
      猜你喜欢
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2021-04-02
      • 2013-06-11
      • 2023-03-17
      • 1970-01-01
      • 2014-02-05
      • 2019-02-15
      相关资源
      最近更新 更多