如何以编程方式确定索引列是ASC还是DESC

时间:2013-12-02 19:09:21

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

以下查询创建数据库中所有索引名称的列表,每个列都是该索引的一部分。有人能告诉我如何确定该列是否按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  

谢谢! 马特

3 个答案:

答案 0 :(得分:4)

sys.index_columns有一列is_descending_key

  

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

答案 1 :(得分:0)

如果您尚未指定任何排序顺序,则默认情况下会将其作为 ASCENDING 。您还可以添加 ORDER BY 语句来检查

来自Creating Ascending and Descending Indexes

  

定义索引时,可以指定每个索引的数据   列以升序或降序存储。 如果两者都没有   指定方向,升序是默认,维护   与早期版本的Microsoft®SQLServer™兼容。

答案 2 :(得分:0)

SELECT name,is_descending_key
FROM sys.indexes I , sys.index_columns IC
WHERE I.object_id=IC.object_id

此代码为我们提供了索引和asc / desc情况的名称。