显示表列的顺序

4 sql-server sql-server-2016

我创建了一个表,并希望找到其列的显示顺序。我应该使用以下查询来显示由 订购的信息column_id吗?

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


create table dbo.Customer
(
    CustomerId int primary key,
    CustomerName varchar(255),
    CustomerAddress varchar(255),
    EnrollmentDate date
)
Run Code Online (Sandbox Code Playgroud)

阅读Microsoft SQL Server 文档,我看到下面的信息,所以想确定:

列名 数据类型 描述
----------- --------- ------------------------------ ---------------- 
column_id:列的整数 ID。在对象内是唯一的。
                        列 ID 可能不是连续的。

Han*_*non 8

column_id 是列序号的合理代理,因为在 SQL Server 中的两个现有列之间插入列是不可能的,而不删除和重新创建表。

正如文档所述,column_id如果您从表中删除一列,值可能不是顺序的。

您还可以使用COLUMNPROPERTY()函数返回每列的实际序数。

考虑一个简单的例子:

IF OBJECT_ID(N'dbo.t', N'U') IS NOT NULL
DROP TABLE dbo.t;
CREATE TABLE dbo.t
(
    c1 int
    , c2 int
    , c3 int
    , c4 int
);

ALTER TABLE dbo.t DROP COLUMN c1;
ALTER TABLE dbo.t ADD c5 int;
ALTER TABLE dbo.t ALTER COLUMN c2 char(3);

SELECT o.name
    , c.name
    , c.column_id
    , ordinal = COLUMNPROPERTY(c.object_id, c.name, 'ordinal')
FROM sys.columns c
    INNER JOIN sys.objects o ON c.object_id = o.object_id
WHERE o.name = N't'
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

??????????????????????????????????????????
? 姓名 ?姓名 ?列 ID ? 序数?
??????????????????????????????????????????
? ? c2 ? 2 ? 1 ?
? ? c3 ? 3 ? 2 ?
? ? c4 ? 4 ? 3 ?
? ? c5 ? 5 ? 4 ?
??????????????????????????????????????????