Як визначити порядок стовпців у таблиці


9

Мені потрібно перерахувати стовпці з таблиці в порядку визначення таблиці:

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

Вивчаючи syscolumnsтаблиці, два стовпці виглядають актуальними: colidі colorder. У статті 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 не підтверджує, що коллід відображає порядок визначення таблиці. Хоча розумно припустити, що це так, ви можете, будь ласка, повідомити мене, якщо ви впевнені, що це так, як ви знаєте, що це?

Відповіді:


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

Це має повернути порядок ваших стовпців. Зауважте, що ці ідентифікатори стовпців можуть бути не послідовними.


7

Я хотів би запропонувати також INFORMATION_SCHEMA перегляди. Це ANSI Standard і працює міжбазова база даних, для баз даних, які їх підтримують.

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

3

Якщо ви хочете / потребуєте стовпцівID послідовно, я використав:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.