วิธีการระบุลำดับคอลัมน์ในตาราง


9

ฉันต้องการรายการคอลัมน์จากตารางตามลำดับคำจำกัดความของตาราง:

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

โดยการตรวจสอบsyscolumnsตารางสองคอลัมน์มองที่เกี่ยวข้อง: และcolid บทความ MSDN ใน syscolumnsพูดว่า:colorder

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

ซึ่งไม่ได้ให้แถวและนั่นทำให้ฉันคิดว่าคอลัมน์เหล่านี้มีค่าเหมือนกันเกือบตลอดเวลา

ดูเหมือนว่าการเดิมพันที่ปลอดภัยที่สุดคือการใช้โคลิด อย่างไรก็ตามฉันอยากรู้อยากเห็น: มีความแตกต่างระหว่างสองคอลัมน์นี้และถ้ามีความแตกต่างนี้คืออะไร?

นอกจากนี้บทความ MSDN ไม่ยืนยัน colid ที่สะท้อนถึงลำดับของคำจำกัดความของตาราง แม้ว่าจะมีเหตุผลพอที่จะคิดได้ว่าเป็นกรณีนี้คุณช่วยบอกฉันหน่อยได้ไหมถ้าคุณแน่ใจว่าเป็นอย่างนั้นคุณจะรู้ได้อย่างไรว่าเป็นเช่นนั้น?

คำตอบ:


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.