web-dev-qa-db-ja.com

列がMSSQL2000のID列であるかどうかを確認するにはどうすればよいですか?

ALT + F1ではなく、コードでこれを実行したいと思います。

27
Bialecki

次のようにすることもできます。

select columnproperty(object_id('mytable'),'mycolumn','IsIdentity')

IDの場合は1を返し、そうでない場合は0を返します。

64
Blorgbeard
sp_help tablename 

出力で次のようなものを探します。

 Identity     Seed     Increment     Not For Replication    
 -----------  -------  ------------  ---------------------- 
 userid       15500    1             0        
19

WHERE句を次のように調整します。

select
    a.name as TableName,
    b.name as IdentityColumn
from
    sysobjects a inner join syscolumns b on a.id = b.id
where
    columnproperty(a.id, b.name, 'isIdentity') = 1
    and objectproperty(a.id, 'isTable') = 1
4
Luke Bennett

Identityは、テーブルにロードされる最初の行に使用される値です。

Identityに関する優れた知識を提供できるMicrosoftの記事があります。

https://docs.Microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property?view=sql-server-2017

ここで、どの列がテーブルのID列であるかを識別する方法がいくつかあります。

  • SQLクエリを使用できます:selectcolumnproperty(object_id( 'mytable')、 'mycolumn'、 'IsIdentity')
  • sp_helptablename
0
KamalDeep

@Blogbeardの回答の拡張として

組み込み関数ではなく純粋なクエリが好きな場合

select col_name(sys.all_objects.object_id, column_id) as id from sys.identity_columns 
join sys.all_objects on sys.identity_columns.object_id = sys.all_objects.object_id
where sys.all_objects.name = 'system_files'
0
Tschallacka