5

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

4

2 回答 2

7

我没有立即可用的数据库来测试这一点,但是您应该能够通过使用以下 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'
)
于 2008-10-23T16:35:34.147 回答
4

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


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'
)

于 2008-10-23T17:11:06.743 回答