Существует ли чистый запрос T-SQL, который я могу использовать, чтобы проверить, что индекс имеет правые столбцы?

Пожалуйста, проверьте мой ответ ниже

transaction = con.BeginTransaction();
string query1 ="Insert Into ABC(NewsCode,Comment) output INSERTED.ID Values (@NewsCode,@Comment)"; 
cmd = db.GetSqlStringCommand(query1);
cmd.Transaction = transaction;
cmd.Connection = con;

db.AddInParameter(cmd, "NewsCode", DbType.Int32, News.NewsCode);
db.AddInParameter(cmd, "Comment", DbType.String,News.Comment);

int modifiedRowId =(int)cmd.ExecuteScalar();
5
задан Kevin Fairchild 14 November 2008 в 17:55
поделиться

2 ответа

У меня нет базы данных сразу под рукой для тестирования этого, но необходимо смочь видеть, существует ли столбец в индексе при помощи следующего ЕСЛИ оператор 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'
)
7
ответ дан 13 December 2019 в 19:38
поделиться

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


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

4
ответ дан 13 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: