Cách xác định thứ tự cột trong bảng


9

Tôi cần liệt kê các cột từ một bảng theo thứ tự định nghĩa bảng:

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

Bằng cách kiểm tra syscolumnscác bảng hai cột có liên quan: colidcolorder. Bài viết MSDN về syscolumns nói:

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

Tôi đã cố chạy

select * from syscolumns where colorder <> colid

điều này không mang lại hàng nào và điều đó khiến tôi nghĩ rằng các cột này có cùng giá trị hầu hết thời gian.

Có vẻ như đặt cược an toàn nhất là sử dụng colid. Tuy nhiên tôi sẽ tò mò muốn biết: có sự khác biệt giữa hai cột này không, và nếu có, sự khác biệt này là gì?

Ngoài ra, bài viết MSDN, không xác nhận, rằng colid phản ánh thứ tự của định nghĩa bảng. Mặc dù điều này là hợp lý để cho rằng đây là trường hợp, bạn có thể vui lòng cho tôi biết, nếu bạn chắc chắn rằng đó là trường hợp, làm thế nào bạn biết rằng đây là?

Câu trả lời:


11

Bạn nên sử dụng sys.columnsxem danh mục. syscolumnschỉ được bao gồm để tương thích ngược. Đây thực sự là một bảng hệ thống SQL Server 2000 không nên được sử dụng trong SQL Server 2008 R2.

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

Điều đó sẽ trả về thứ tự các cột của bạn. Lưu ý, mặc dù, các id cột này có thể không tuần tự.


7

Tôi cũng muốn cung cấp các lượt xem Information_SCHema. Đây là tiêu chuẩn ANSI và hoạt động cơ sở dữ liệu chéo, dành cho cơ sở dữ liệu hỗ trợ chúng.

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

3

Nếu bạn muốn / cần các cộtID theo trình tự, tôi đã sử dụng:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.