回答

收藏

识别Sybasetables, fields, keys, constraints

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

正在尝试设置一个Sybase查询,该查询将为我提供以下输出:
9 {- F8 f: a8 W" [Table     KeyType      KeyNumber      Column
3 D3 f6 W# W3 ^$ A8 B; V9 `table1    PK           1              table1_id
  Q7 b9 V6 v; \2 e  mtable1    FK           2              table2_id   
# I; F2 I  Q* W  Xtable1    FK           3              table3_id% N2 {3 c  N* _% ~5 a$ e1 W+ h
table1    FK           4              table4_id
5 ?6 a& v, a' x1 F' c+ }table1    Unique       5              table1_abc$ H+ R: X; g9 g. W7 U! i
table1    Unique       5              table1_def# o+ b8 x! E. b7 n5 \- B
* p1 I; d& c* p8 L+ t$ u8 S
换句话说,我需要每个表的PK,它具有的每个外键以及每个唯一键(不是一个键具有多个元素(例如上面的唯一键)的地方,是通过具有相同的PK来标识的。键号)。1 i; J% ?5 }( l. L2 y
我猜我需要使用sysobject,syscolumns,syskeys和sysconstraints,但我似乎无法弄清楚它们如何相互链接。; G7 ]! m. N& X, W/ Y1 @& x
                6 m! O# U' d  d5 E/ Y4 b& |
解决方案:
# L; K& b( i. j' U# J1 Y                6 c5 g$ W/ j9 c" E/ k3 E& l3 R

: Z+ Z; T4 k! k! A" x; p/ l) B+ g2 e0 O7 w! F  X
                这是一个开始:$ d* P0 Z" @  C2 i1 ~
SELECT
% a5 ]7 v- n  A: U# d4 H    t.name,
6 J3 t+ o5 N; k1 s- [5 o    CASE k.type
; G1 [* ?5 y) N0 ?! W/ I; A        WHEN 1 THEN 'PK'
' J6 ~0 \# K- e$ N! e4 |        WHEN 2 THEN 'FK'
/ }9 \# ], D! Y0 w( A        WHEN 3 THEN 'Common'
3 K# C* B( B7 Z; ~. i( N) c4 C    END,3 b6 F- w0 Z$ ~* E. O) Y# D
    c.name0 i! h7 o- }" Z9 x' r
FROM - L5 w8 q% f& p' U" h
    sysobjects t INNER JOIN
3 z/ V1 C, S9 A. C; g) y, C9 s    syscolumns c ON c.id = t.id INNER JOIN& H. |; y& B6 M& Q+ A9 K; e7 y
    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)
& g( Y! C4 Q4 LWHERE 7 s- p+ e& m, U$ v
    t.type = 'U' AND k.type in (1,2)! l* Q) ^7 K- R9 k( b

4 G  \( I# Q- w! e它不包含键ID,因为我想您可能会以某种方式对非空表ID和keyN列进行哈希处理以产生键的唯一ID。
6 W$ q6 o: h5 H. x) z1 \& I它还不包括唯一索引。为此,您需要采取UNION以下措施:" A% Y9 i7 Z+ U! b5 O" K8 o5 U1 I
SELECT
; S" T3 f' d) F/ {9 M( T    t.name,
4 U$ l% A+ M  G4 C: y    'Unique',7 i/ k% ?& n1 A9 b" U! I
    c.name
& t! A* K% {* A; \9 k9 G( xFROM : `0 O+ m0 S7 t/ s" H( Y
    sysobjects t INNER JOIN
* P+ W6 F$ r  X; Y, W. ]+ V    syscolumns c ON c.id = t.id INNER JOIN
' b: s  T. j1 v) R- h4 w/ o( O, F    sysindexes i ON i.id = t.id
1 u$ U" q3 q5 x( O9 OWHERE t.type = 'U'
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则