1

特定のテーブルのすべての列のリストを、sys.indexes テーブルからデータ型と is_primary_key 列と共に取得しようとしています。しかし、is_primary_key 列を正しく取得できません。テーブルの主キーとなるカラムのみis_primary_keyを1に設定したいのですが、これは全てのカラムに対して1に設定されています

以下は私が使用しているクエリです

select distinct c.name,c.system_type_id,is_primary_key from sys.columns c 
   inner join  sys.tables t on c.object_id=t.object_id
   inner join sys.index_columns ic on ic.column_id=c.column_id 
   inner join sys.indexes i on i.index_id=ic.index_id
   and t.name='comp' and i.is_primary_key=1
4

2 に答える 2

2

変換

inner join sys.indexes i on i.index_id=ic.index_id

inner join sys.indexes i on i.index_id=ic.index_id and i.object_id=ic.object_id

の主キーはsys.indexesです(object_id, index_id)。についても同様のエラーが発生しsys.index_columnsます。

于 2012-06-28T21:07:53.900 に答える
1
select '['+name+']',system_type_id, case when primarykeyCol.column_id is null then 0 else 1 end primaryCol  from sys.columns c 
left join (select c.column_id from sys.indexes i  
inner join sys.index_columns ic on i.index_id = ic.index_id and i.is_primary_key = 1 and i.object_id = object_id(@srctablename) and  ic.object_id = object_id(@srctablename)
inner join sys.columns c on ic.column_id = c.column_id and c.object_id = object_id(@srctablename) 
) primarykeyCol on primarykeyCol.column_id = c.column_id 

where c.object_id = object_id(@srctablename)
于 2012-06-29T14:52:37.163 に答える