【问题标题】:How do I Programatically Determine if an Index Column is ASC or DESC如何以编程方式确定索引列是 ASC 还是 DESC
【发布时间】:2013-12-02 19:09:21
【问题描述】:

以下查询创建数据库中所有索引名称的列表,其中包含该索引的每一列。谁能告诉我如何确定该列是按 ASC 还是 DESC 排序的?

SELECT     ind.name as index_name     ,
           t.[name] as table_name     ,
           col.name as column_name     ,
           ic.index_column_id as index_column_id 
FROM [GDI-193-DEV].sys.indexes ind  
       INNER JOIN [GDI-193-DEV].sys.index_columns ic      
            ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id  
       INNER JOIN [GDI-193-DEV].sys.columns col      
           ON ic.object_id = col.object_id and ic.column_id = col.column_id  
       INNER JOIN [GDI-193-DEV].sys.tables t      
           ON ind.object_id = t.object_id  
WHERE  ind.is_primary_key = 0 AND ind.is_disabled = 0 
ORDER BY      
       t.name, ind.name, ind.index_id, ic.index_column_id  

谢谢! 马特

【问题讨论】:

  • ASCDESC 添加到ORDER BY 子句的末尾。
  • 也许您可以检查列第一行的值是 > 还是
  • 对于主键,index_column_id不是在键中列的顺序,而是在表中!请改用key_ordinal

标签: sql sql-server sql-server-2008 indexing


【解决方案1】:

sys.index_columns有一列is_descending_key

1 = 索引键列具有降序排序方向。
0 = 索引键列具有升序排序方向。
不适用于返回 0 的列存储索引。

【讨论】:

    【解决方案2】:

    如果您没有指定任何排序顺序,那么默认情况下它会将其作为 ASCENDING。您也可以添加 ORDER BY 语句来检查

    来自Creating Ascending and Descending Indexes

    定义索引时,可以指定每个数据是否 列按升序或降序存储。 如果两者都不是 指定方向,默认为升序,保持 与早期版本的 Microsoft® SQL Server™ 兼容。

    【讨论】:

      【解决方案3】:
      SELECT name,is_descending_key
      FROM sys.indexes I , sys.index_columns IC
      WHERE I.object_id=IC.object_id
      

      这段代码给了我们索引的名字和asc/desc的情况。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多