sql-server - 是否有一个干净的 T-SQL 查询可以用来验证索引是否具有正确的列?

标签 sql-server tsql indexing

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

最佳答案

我手头没有数据库可以立即测试这一点,但您应该能够使用以下 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'
)

关于sql-server - 是否有一个干净的 T-SQL 查询可以用来验证索引是否具有正确的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/230397/

相关文章:

sql - 传递包含多个 ID 的单个参数

sql - 如何在 SQL Server 中有效地合并两个层次结构?

sql-server - SQL LIKE 运算符不适用于亚洲语言 (SQL Server 2008)

c# - 一个存储过程也可以更新整个表或单个列

sql - 对象或列名称缺失或为空

sql - 仅当 SQL Server 中存在外键约束时,如何删除它?

mysql - Oracle to MySQL migration 关于语法差异的两个问题

oracle - 在 Oracle 临时表上放置索引是否安全?

tsql - 将 unix 纪元时间戳转换为 TSQL 日期时间

sql-server-2005 - 为什么 Microsoft 在 SQL Server 2005 中的表上提供了 2 个不同的选项来创建唯一索引?