【问题标题】:SQL: Include a new column in an indexSQL:在索引中包含一个新列
【发布时间】:2021-01-16 18:02:01
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server ddl database-indexes


    【解决方案1】:

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

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

    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_columns 有一个字段 is_included_column(为 1 或 0),如果需要,您可以使用它来确定它是否是索引的“包含”部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2017-10-04
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多