识别Sybasetables, fields, keys, constraints
技术问答
338 人阅读
|
0 人回复
|
2023-09-14
|
正在尝试设置一个Sybase查询,该查询将为我提供以下输出:. E/ ?/ G/ F& ~$ O
Table KeyType KeyNumber Column+ X8 i! D* Q+ B: y% b" f* l
table1 PK 1 table1_id
, f! Q2 i6 A/ z Dtable1 FK 2 table2_id
4 e3 R1 _6 T0 |# E: Z6 c# Vtable1 FK 3 table3_id. U4 y6 j- J: o8 C z
table1 FK 4 table4_id
. X4 W: g" }; |table1 Unique 5 table1_abc" M5 z9 \- C# G2 r D
table1 Unique 5 table1_def7 w: A2 W* T$ m/ Z
1 h4 F, ^+ j1 R+ T- Z; w5 w
换句话说,我需要每个表的PK,它具有的每个外键以及每个唯一键(不是一个键具有多个元素(例如上面的唯一键)的地方,是通过具有相同的PK来标识的。键号)。
- Y$ Y% D& h% _! c我猜我需要使用sysobject,syscolumns,syskeys和sysconstraints,但我似乎无法弄清楚它们如何相互链接。
3 P2 r- i: b6 O$ u8 U- E1 w3 Y / a$ [) W k) L% \6 j, z9 D/ |
解决方案:1 b' y% |8 `# }
+ |5 N/ q$ |" N& S% \/ v+ G
! P, p& i* w& Q. e1 X% e2 v5 @! U* p
$ I) c* Y* i6 g3 ?; { 这是一个开始:8 k1 l; ~9 U: R. r( d9 \+ d
SELECT
) G( Z5 X$ f y7 s" `; T7 U t.name,
: V& a6 g/ ~; e CASE k.type
6 i3 g& d- X2 q WHEN 1 THEN 'PK'
5 u4 L# y# N8 i/ [2 K: z WHEN 2 THEN 'FK'
3 z, M' E# _) m5 b" N# p WHEN 3 THEN 'Common'
6 p9 S& f' A# n8 T! J3 Y9 M4 } END,
) q4 g; ^ T+ S- | F1 j c.name( h; ]+ N4 M# E9 A) Y5 i" y0 y
FROM + ^# J9 m5 Y( Q2 s' l5 N; t
sysobjects t INNER JOIN
: j% E7 i5 S! I/ R5 W t syscolumns c ON c.id = t.id INNER JOIN
, y Y# v( Z, D6 T 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)2 y3 ~: h1 ^, G5 s: x
WHERE / y8 p1 R* V4 W6 h7 D
t.type = 'U' AND k.type in (1,2)
* r" X, Q) Q& F2 Z3 L* c
( i# T3 x* b) [. M9 G它不包含键ID,因为我想您可能会以某种方式对非空表ID和keyN列进行哈希处理以产生键的唯一ID。1 q& k) ], b% _* N9 e; K; @% ]
它还不包括唯一索引。为此,您需要采取UNION以下措施:
' S* F4 a* K k" L5 u vSELECT
# C5 _$ @: R3 l. b t.name, 2 ^; j9 V1 v* O$ W$ a4 |
'Unique',
/ k& ~' a) G/ V0 @5 a( {6 n c.name
j" A) v+ ~( x, e7 ^% i# h7 VFROM }7 n0 _1 U% W9 e+ D. F, D
sysobjects t INNER JOIN
+ Q# @) U% u& p0 D; f: [1 P syscolumns c ON c.id = t.id INNER JOIN
% S6 ?2 v/ C7 k) l% S sysindexes i ON i.id = t.id
7 j8 ^6 d0 d a( l: WWHERE t.type = 'U' |
|
|
|
|
|