Preciso listar as colunas de uma tabela na ordem de definição da tabela:
select * from syscolumns
where id = object_id('MyTable')
--order by colid
Ao examinar syscolumns
as tabelas, duas colunas parecem relevantes: colid
e colorder
. O artigo do MSDN sobre syscolumns diz:
colid | smallint | Column or parameter ID.
colorder | smallint | Identified for informational purposes only.
| Not supported. Future compatibility is not guaranteed.
eu tentei correr
select * from syscolumns where colorder <> colid
que não rendeu linhas, e isso me faz pensar que essas colunas têm os mesmos valores na maioria das vezes.
Parece que a aposta mais segura é usar colid. No entanto, gostaria de saber: existe alguma diferença entre essas duas colunas e, se houver, qual é essa diferença?
Também o artigo do MSDN, não confirma, que colid reflete a ordem da definição da tabela. Embora seja razoável supor que seja esse o caso, você poderia me informar, se tiver certeza de que é o caso, como você sabe disso?
Você deve estar usando a
sys.columns
exibição de catálogo.syscolumns
está incluído apenas para compatibilidade com versões anteriores. Na verdade, é uma tabela de sistema do SQL Server 2000 que não deve ser usada no SQL Server 2008 R2.Isso deve retornar a ordem de suas colunas. Observe, porém, que esses IDs de coluna podem não ser sequenciais.
Eu gostaria de oferecer também views INFORMAÇÕES_SCHEMA. Estes são o padrão ANSI e funcionam em bancos de dados cruzados, para bancos de dados que os suportam.
Se você quiser/precisar dos columnIDs em sequência, usei: