SQL:在索引中包含新列

SQL:在索引中包含新列,sql,sql-server,ddl,database-indexes,Sql,Sql Server,Ddl,Database Indexes,我在一个表的两行上有一个非聚集索引,它包括许多列。索引由视图使用,视图现在已更新为包含另一列。我通常编写数据库更改的脚本,以便它们首先测试是否已应用更改,这显然意味着,例如,如果重新运行脚本,不会意外地多次添加列 我想通过删除并重新创建新列来将其添加到索引中(除非有办法在不重新创建索引的情况下包含额外的列)。但我想先测试一下索引是否包含该列。是否有一种简单的检查方法?我认为这将提供所有索引上的列列表(提供表名、索引名和列名)。我相信它们之间的链接是正确的,但请手动检查(例如,在没有列的索引上测试

我在一个表的两行上有一个非聚集索引,它包括许多列。索引由视图使用,视图现在已更新为包含另一列。我通常编写数据库更改的脚本,以便它们首先测试是否已应用更改,这显然意味着,例如,如果重新运行脚本,不会意外地多次添加列


我想通过删除并重新创建新列来将其添加到索引中(除非有办法在不重新创建索引的情况下包含额外的列)。但我想先测试一下索引是否包含该列。是否有一种简单的检查方法?

我认为这将提供所有索引上的列列表(提供表名、索引名和列名)。我相信它们之间的链接是正确的,但请手动检查(例如,在没有列的索引上测试,然后在有列的索引的新版本上测试)

然后您可以根据需要添加where子句/IF EXISTS/etc

SELECT  so.name AS [TableName],
        si.name AS [IndexName],
        sc.name AS [IndexColumnName]
FROM    sys.indexes AS si
INNER JOIN sys.objects AS so ON so.object_id = si.object_id AND is_ms_shipped = 0
INNER JOIN sys.index_columns AS sic ON si.object_id = sic.object_id AND si.index_id = sic.index_id
INNER JOIN sys.columns AS sc ON sic.object_id = sc.object_id AND sic.column_id = sc.column_id
请注意,
sys.index\u columns
有一个字段
is\u included\u column
(为1或0),如果需要,可以使用该字段确定它是否是索引的“included”部分