sys.indexes似乎已过时

时间:2013-06-10 13:48:14

标签: sql-server

我想创建一个脚本来修改表上的索引。首先,我检查查询中的sys.indexes,sys.index_columns以确保索引尚未被修改(列与我期望的相同),并在需要更新时删除索引。然后,如果它不存在,我用新结构创建索引。所有这些似乎工作正常,当我去我的表上的对象浏览器并查看索引的属性一切都很好。但是,当我再次查询sys.indexes和sys.index_columns时,它会显示OLD索引的结构。如何更新这些表?我认为在删除索引后再次创建索引会自动发生。

1 个答案:

答案 0 :(得分:2)

我的查询错误,正在查看sys.indexes。

我有这个:

SELECT *
FROM sys.indexes i
JOIN sys.index_columns ic
  ON ic.index_id = i.index_id
  AND ic.object_id = i.object_id
JOIN sys.columns c
  ON c.object_id = i.object_id
  AND c.column_id = ic.index_column_id  --<--
WHERE i.name = 'Index002'

应该是这个:

SELECT *
FROM sys.indexes i
JOIN sys.index_columns ic
  ON ic.index_id = i.index_id
  AND ic.object_id = i.object_id
JOIN sys.columns c
  ON c.object_id = i.object_id
  AND c.column_id = ic.column_id --<--
WHERE i.name = 'Index002'