テーブルの列の順序を識別する方法


9

テーブルの列をテーブル定義順にリストする必要があります。

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

調べることでsyscolumns、テーブルの2つの列は、関連を見て:colidcolordersyscolumnsに関するMSDNの記事によれば、

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

これは行を生成しなかったので、これらの列にはほとんどの場合同じ値があると思います。

最も安全な方法は、colidを使用することです。しかし、私は知りたいと思います:これらの2つの列の間に違いはありますか、ある場合、この違いは何ですか?

また、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.