回答

收藏

识别Sybasetables, fields, keys, constraints

技术问答 技术问答 163 人阅读 | 0 人回复 | 2023-09-14

正在尝试设置一个Sybase查询,该查询将为我提供以下输出:  U3 w4 O" I0 D" y! P3 C
Table     KeyType      KeyNumber      Column" l+ F/ d- L3 U8 ?
table1    PK           1              table1_id: @6 y5 g4 D, C! j, q8 j, X( D
table1    FK           2              table2_id   
/ q1 s' }0 a# q2 @' \2 J4 f: R( ~table1    FK           3              table3_id
* j* e1 d- e& g% J$ i8 ]table1    FK           4              table4_id9 H4 U# @6 I& U/ w: N% ?) [2 r$ X- I
table1    Unique       5              table1_abc  L# a1 J: l! F/ A8 L3 M0 M9 j
table1    Unique       5              table1_def5 V0 G5 W- w0 v; s

* |% X5 l: \7 J% a8 [7 i换句话说,我需要每个表的PK,它具有的每个外键以及每个唯一键(不是一个键具有多个元素(例如上面的唯一键)的地方,是通过具有相同的PK来标识的。键号)。
6 }. W. p/ N1 p我猜我需要使用sysobject,syscolumns,syskeys和sysconstraints,但我似乎无法弄清楚它们如何相互链接。/ V! O, h: [$ |4 Z
                % `" R, C9 b2 ^: R( M
解决方案:' ]/ e( l2 j2 a8 ]- N
               
5 [, o& U' V- v  x; j' W
( a. Q' v) c/ O  y1 P$ R
$ G/ D3 X8 t- [  w/ s( Y9 T: a. H                这是一个开始:% [" G6 ]' z7 I  }/ J& v$ T% Q
SELECT ! X8 I: w% t0 W
    t.name,
1 D& ]8 C  Q" O$ W    CASE k.type
$ x" a* g. n$ K" ~  Y- p  G0 T        WHEN 1 THEN 'PK' 9 k% T/ y( H6 C8 U$ L. P0 Z& t
        WHEN 2 THEN 'FK'6 P5 g) v5 B# u
        WHEN 3 THEN 'Common'2 A; S/ }" g+ X  Z/ R
    END,
( f0 V8 ~7 i* O( O% k; k2 D6 I    c.name
! J8 R/ G& T- S$ P9 VFROM : u9 R' Z1 [# @
    sysobjects t INNER JOIN
* Y  E  ^& ]6 t& g8 P    syscolumns c ON c.id = t.id INNER JOIN4 _1 z" ^2 ~8 f, A
    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)5 C% r8 m4 `5 U0 o; V& x5 j
WHERE
" T9 l* Q- a$ W0 f) O    t.type = 'U' AND k.type in (1,2)
$ T" M$ M8 o% Q6 k. p9 E8 |2 V3 o9 r
它不包含键ID,因为我想您可能会以某种方式对非空表ID和keyN列进行哈希处理以产生键的唯一ID。
) O( `6 u6 l5 {4 y) b; M+ v$ y它还不包括唯一索引。为此,您需要采取UNION以下措施:
9 ]( ^7 `4 S$ ZSELECT
: `/ e4 w$ U' q    t.name,
/ P# p0 s0 K; N+ W' y4 z    'Unique',
$ E/ r+ s# V& ~% H, ?    c.name
3 v7 Z! b+ ]% `FROM
' E( r" S6 _. A( t, K: d9 f" p( c- R    sysobjects t INNER JOIN 0 k" }7 C, \% @1 ^
    syscolumns c ON c.id = t.id INNER JOIN
+ E* r3 t) f7 m" T    sysindexes i ON i.id = t.id9 f: [; d: D4 x8 Z
WHERE t.type = 'U'
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则