我试图获取特定表的所有列的列表以及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
答案 0 :(得分: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
有类似的错误。
答案 1 :(得分: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)