Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否有一个干净的T-SQL查询可以用来验证索引是否有正确的列?_Sql Server_Tsql_Indexing - Fatal编程技术网

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

Sql server 是否有一个干净的T-SQL查询可以用来验证索引是否有正确的列?,sql-server,tsql,indexing,Sql Server,Tsql,Indexing,我正在编写一个DB升级脚本,它将检查索引是否定义了正确的两列。如果没有,或者如果它只有其中一个,那么我将删除它(有没有办法更改索引?),然后用这两个来重新创建它。我手头没有一个数据库来测试这一点,但是您应该能够使用下面的If exists语句来查看索引中是否存在列 我不确定你是否可以随时修改索引 IF EXISTS ( SELECT MyIndex.Name AS IndexName, Columns.name AS ColumnName FROM sys.i

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

我手头没有一个数据库来测试这一点,但是您应该能够使用下面的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'
)

谢谢你的帮助,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'
)

我修复了我的响应,以包括其他连接条件。我很高兴能帮上忙。你可以考虑把你或我的答案标记为正确。