SQL Server 2000の場合
各データベースのsystemテーブルの
syscolumnsテーブル
colstat列(smallint型)
(colstat & 1) != 0 :IDENTITY
(colstat & 2) != 0 :ROWGUID
(colstat & 4) != 0 :計算列
ちなみに、計算列については
iscomputed(int)という列が別にあり、値が1の時、計算列になっている模様
isnullable(int)ではNOT NULLかどうかを判別できます。
SQL Server 2005の場合
システムテーブルがビューに移動しています。
dbo.syscolumnsシステムテーブルは、sys.syscolumnsビューになっています。
システムテーブルが無くなりビューになったため、ここには従来のようなシステムテーブルの列情報は含まれていません。このため従来のdbo.syscolumnsに相当するのは、sys.all_columnsとなるようです。
sys.all_columnsにはis_identityという列があり、IDENTITY列かどうかはこれで判別できるようです(おーっ、わかりやすいっ!)。ROWGUIDも、is_rowguidcol列で取得できます。計算列は別なビューsys.computed_columnsに収まっているようです。
ちなみに、dbo.sysobjectsシステムテーブルもsys.sysobjectsビューになっており、同じくここにはユーザー定義のオブジェクトのみが含まれています(なお従来のようにdbo.sysobjectsでも参照可能)。従来のdbo.sysobjectsに相当するのは、sys.all_objectsのようです。
SQL Server 2005への移行の際、これらの情報を直接取得するプログラムがある場合、書き換える必要がありそうです。