And*_*ykh 10 sql-server sql-server-2008-r2
我需要按表定义顺序列出表中的列:
select * from syscolumns
where id = object_id('MyTable')
--order by colid
Run Code Online (Sandbox Code Playgroud)
通过检查syscolumns
表,两列看起来相关:colid
和colorder
。关于 syscolumns 的 MSDN 文章说:
colid | smallint | Column or parameter ID.
colorder | smallint | Identified for informational purposes only.
| Not supported. Future compatibility is not guaranteed.
Run Code Online (Sandbox Code Playgroud)
我试着跑
select * from syscolumns where colorder <> colid
Run Code Online (Sandbox Code Playgroud)
这没有产生任何行,这让我认为这些列在大多数情况下具有相同的值。
看起来最安全的选择是使用colid。但是我很想知道:这两列之间是否有区别,如果有,区别是什么?
MSDN 文章也没有确认,colid 反映了表定义的顺序。虽然可以合理地假设情况确实如此,但您能否告诉我,如果您确定确实如此,您是如何知道是这样的?
Tho*_*ger 14
您应该使用sys.columns
目录视图。 syscolumns
仅用于向后兼容。它实际上是一个不应在 SQL Server 2008 R2 中使用的 SQL Server 2000 系统表。
select *
from sys.columns
where object_id = object_id('MyTable')
order by column_id
Run Code Online (Sandbox Code Playgroud)
那应该返回您的列的顺序。但请注意,这些列 ID 可能不是连续的。
Ati*_*gur 10
我还想提供 INFORMATION_SCHEMA 视图。这些是 ANSI 标准,跨数据库工作,适用于支持它们的数据库。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MyTable'
ORDER BY ORDINAL_POSITION
Run Code Online (Sandbox Code Playgroud)
如果您想要/需要按顺序排列列 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20979 次 |
最近记录: |