web-dev-qa-db-ja.com

システムテーブルを使用してSybaseのテーブルインデックスの列を識別する

syscolumnssysindexessysobjectsなどのように体系的に入力されたシステムテーブルを使用して、テーブルインデックスの列を識別する手段はありますか?.

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
1
munyengm

私は次の解決策を思いつきました-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
1
munyengm

誰かの正気のために、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**
0
nka