识别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' |
|
|
|
|
|