Bir tablodaki sütun sırasını belirleme


9

Tablo tanımı sırasında bir tablodaki sütunları listelemek gerekiyor:

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

syscolumnsTabloları inceleyerek iki sütun alakalı görünmektedir: colidve colorder. Syscolumns hakkındaki MSDN makalesi şöyle diyor:

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

Koşmaya çalıştım

select * from syscolumns where colorder <> colid

hiçbir satır vermedi ve bu da bu sütunların çoğu zaman aynı değerlere sahip olduğunu düşündürüyor.

En güvenli bahsin gizli kullanmak olduğu anlaşılıyor. Ancak merak ediyorum: Bu iki sütun arasında bir fark var mı ve eğer varsa, bu fark nedir?

Ayrıca MSDN makalesi, colid'in tablo tanımının sırasını yansıttığını doğrulamaz. Bu durumun böyle olduğunu varsaymak makul olsa da, lütfen bana bildirin, eğer durumdan eminseniz , bunun nasıl olduğunu biliyor musunuz?

Yanıtlar:


11

sys.columnsKatalog görünümünü kullanıyor olmalısınız . syscolumnsyalnızca geriye dönük uyumluluk için dahil edilmiştir. Gerçekten SQL Server 2008 R2'de kullanılmaması gereken bir SQL Server 2000 sistem tablosu.

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

Bu, sütunlarınızın sırasını döndürmelidir. Bununla birlikte, bu sütun kimlikleri sıralı olmayabilir.


7

BİLGİ_SCHEMA görünümleri de sunmak istiyorum. Bunlar ANSI Standardıdır ve veritabanlarını destekleyen veritabanları için çalışır.

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

3

İsterseniz / sırayla columnIDs, kullandım:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.