2

次の出力が得られる Sybase クエリを設定しようとしています。

Table     KeyType      KeyNumber      Column
table1    PK           1              table1_id
table1    FK           2              table2_id    
table1    FK           3              table3_id
table1    FK           4              table4_id
table1    Unique       5              table1_abc
table1    Unique       5              table1_def

つまり、テーブルごとに PK が必要で、そこに含まれるすべての外部キーと、すべての一意のキーが必要です (上記の一意のキーのように、キーに複数の要素がある場合ではなく、同じ要素を持つことで識別されます)。キー番号)。

sysobject、syscolumns、syskeys、および sysconstraints を使用する必要があると推測していますが、それらがどのように相互リンクしているかはわかりません。

ありがとう
カール

4

1 に答える 1

3

これは始まりです:

SELECT 
    t.name, 
    CASE k.type 
        WHEN 1 THEN 'PK' 
        WHEN 2 THEN 'FK'
        WHEN 3 THEN 'Common'
    END,
    c.name
FROM 
    sysobjects t INNER JOIN 
    syscolumns c ON c.id = t.id INNER JOIN
    syskeys k ON k.id = t.id AND c.colid IN (k.key1, k.key2, k.key3, k.key4, k.key5, k.key6, k.key7, k.key8)
WHERE 
    t.type = 'U' AND k.type in (1,2)

キー ID は含まれていません。そのため、null 以外のテーブル ID と keyN 列を何らかの方法でハッシュして、キーの一意の ID を生成できると思います。

また、一意のインデックスも含まれません。そのためには、次のようなものを使用したいと思うでしょうUNION:

SELECT 
    t.name, 
    'Unique',
    c.name
FROM 
    sysobjects t INNER JOIN 
    syscolumns c ON c.id = t.id INNER JOIN
    sysindexes i ON i.id = t.id
WHERE t.type = 'U'

sysindexesをフィルタリングする方法については、 Sybase のマニュアル ページを参照してください。

于 2011-02-18T08:04:11.740 に答える