如何识别表格中的列顺序


9

我需要按表定义顺序列出表中的列:

select * from syscolumns
where id = object_id('MyTable')
--order by colid

通过检查syscolumns表格,两列看起来很相关:colidcolorder关于syscolumns的MSDN文章说:

colid    | smallint | Column or parameter ID.
colorder | smallint | Identified for informational purposes only. 
                    | Not supported. Future compatibility is not guaranteed.

我试着跑

select * from syscolumns where colorder <> colid

它不产生任何行,这使我认为大多数时间这些列具有相同的值。

看起来最安全的选择是使用colid。但是,我很想知道:这两列之间是否有区别,如果有区别,那有什么区别?

同样,MSDN文章(未确认)colid反映了表定义的顺序。尽管可以合理地假设情况确实如此,但如果您确定情况确实如此,您能告诉我吗?

Answers:


11

您应该使用sys.columns目录视图。 syscolumns仅包括向后兼容性。它实际上是一个SQL Server 2000系统表,不应在SQL Server 2008 R2中使用。

select *
from sys.columns
where object_id = object_id('MyTable')
order by column_id

那应该返回您的列的顺序。但是请注意,这些列ID可能不是连续的。


7

我还想提供INFORMATION_SCHEMA视图。这些是ANSI标准,适用于支持它们的数据库。

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MyTable'
ORDER BY ORDINAL_POSITION

3

如果您想要/需要按顺序排列的columnID,我已经使用过:

select 
    ROW_NUMBER() OVER (PARTITION BY OBJECT_NAME(object_id) ORDER BY Column_ID) as ColumnIDSeq,
    *
from sys.columns
where OBJECT_NAME(object_id) = 'MyTable'
order by column_id
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.