如何以编程方式确定索引列是升序还是降序?

3
下面的查询创建了一个列表,其中包含数据库中所有索引名称以及作为该索引一部分的每个列。有人能告诉我如何确定该列是按升序还是降序排序的吗?
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  

谢谢! Matt


1
在你的 ORDER BY 子句末尾添加 ASCDESC - user1864610
也许你可以检查该列第一行的值是否大于或小于该列最后一行的值。但迈克是正确的,做这件事的最好方式是添加“ORDER BY”语句。 - user2196728
对于主键,index_column_id 不是关键字中列的顺序,而是表中的顺序!请使用 key_ordinal - Michel de Ruiter
3个回答

6

表格sys.index_columns有一个名为is_descending_key的列

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


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

这段代码给我们返回索引的名称和升/降序情况。


0

如果您没有指定任何排序顺序,那么默认情况下它会采用升序。此外,您可以添加ORDER BY语句进行检查。

来自创建升序和降序索引

在定义索引时,您可以指定每个列的数据是按升序还是降序存储的。如果未指定方向,则升序是默认值,这保持了与早期版本的 Microsoft® SQL Server™ 的兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接