syscolumns
、sysindexes
、sysobjects
などのように体系的に入力されたシステムテーブルを使用して、テーブルインデックスの列を識別する手段はありますか?.
syskeys
を使用しようとしましたが、残念ながら、このテーブルにはsp_primarykey
。
これまでのところ、私は次のクエリを持っています:
SELECT
i.name,
o.name
FROM
sysobjects o
INNER JOIN sysindexes i on i.id = o.id
WHERE
o.type = 'U'
and o.name = 'XXXXX'
and i.indid > 0
and i.status & 2 = 2
私は次の解決策を思いつきました-Philのコメントのおかげで:
SELECT
distinct i.name as index_name, index_col(o.name, i.indid, c.colid) as name
FROM
sysobjects o
INNER JOIN sysindexes i on i.id = o.id
INNER JOIN syscolumns c on c.id = o.id
WHERE
o.type = 'U'
and o.name = 'XXXXXX'
and i.indid > 0
and i.status & 2 = 2
and index_col(o.name, i.indid, c.colid) <> null
order by i.name
誰かの正気のために、munyengmはこれを正しくしていますが、dboでも現在のユーザーでもない場合は、オブジェクトの所有者も渡す必要がある場合があります。
**SELECT
distinct i.name as index_name, index_col(o.name, i.indid, c.colid, o.uid) as name
FROM
sysobjects o
INNER JOIN sysindexes i on i.id = o.id
INNER JOIN syscolumns c on c.id = o.id
WHERE
o.type = 'U'
and o.name = 'XXXXXX'
and i.indid > 0
and i.status & 2 = 2
and index_col(o.name, i.indid, c.colid, o.uid) <> null
order by i.name**