天水之兵 发表于 2023-9-14 12:08:08

识别Sybasetables, fields, keys, constraints

正在尝试设置一个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,它具有的每个外键以及每个唯一键(不是一个键具有多个元素(例如上面的唯一键)的地方,是通过具有相同的PK来标识的。键号)。
我猜我需要使用sysobject,syscolumns,syskeys和sysconstraints,但我似乎无法弄清楚它们如何相互链接。
               
解决方案:
               


                这是一个开始:
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,因为我想您可能会以某种方式对非空表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'
页: [1]
查看完整版本: 识别Sybasetables, fields, keys, constraints