Есть ли чистый запрос T-SQL, который я могу использовать для проверки правильности столбцов в индексе? - PullRequest
5 голосов
/ 23 октября 2008

Я пишу скрипт обновления БД, который проверит, правильно ли для индекса определены два столбца. Если этого не произойдет, или если у него будет только один из них, то я УБЛЮДУЮ его (есть ли способ изменить индекс?), А затем воссоздаю его с обоими.

Ответы [ 2 ]

7 голосов
/ 23 октября 2008

У меня нет базы данных для проверки, но вы сможете увидеть, существует ли столбец в индексе, используя следующую инструкцию 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'
)
4 голосов
/ 23 октября 2008

Спасибо за вашу помощь, Эд. Вот решение, которое я написал, используя ваше как начало. Это было проверено. В основном все правильные соединения.


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...