|
我正在寻找一种在更新应用程序版本后在生产数据库上验证SQL模式的方法。如果应用程序与数据库模式版本不匹配,则应该有一种警告用户并列出所需更改的方法。 T1 i% y; \$ s+ {1 k& X2 w' t
是否存在具有内置功能的工具或框架(以编程方式使用)?还是有一些简单的算法可以进行这种比较?
7 b" f( \5 `' M: d1 V9 l" E- s H; \. S! L6 w
更新: 红色大门列出了“ 395美元起”。有什么免费的吗?还是比保留版本号更简单?/ ~) ]( ^: b2 [
% g Z( _1 k: X
6 z# Q+ }# Q3 w解决方案:. w$ c% M: `* n2 }5 R7 j1 C
# M0 U. u1 s# Z) N
5 N1 d5 n* l5 l7 g6 N
t$ v( ?+ Y1 q
试试这个SQL。
q R& e* N8 ^8 r) G" h3 S-针对每个数据库运行它。- }* C! F( V* w) Z9 N1 @
-将输出保存到文本文件。
3 L" i. G5 p @-区分文本文件。 0 j( u* b9 b2 x% U$ Y0 S6 `! h
/* get list of objects in the database */
( ]/ H' b. b) h b" t" `SELECT name, 4 b. r( I" X! `% p1 T' n
type B3 p5 F; d% P/ D
FROM sysobjects
' Y6 e# O6 V+ _ORDER BY type, name
+ `/ C; K+ {& @2 B+ y1 Q/* get list of columns in each table / parameters for each stored procedure */' A0 Q6 p5 d+ Z1 g, @6 J) i
SELECT so.name, 0 I! m' W& z* P4 X) U
so.type,
8 w3 m0 d/ r# [2 l sc.name, 6 E& @$ t- W/ i4 l4 z" n+ n# b
sc.number,
3 x( A5 ^4 o% \$ s sc.colid, 0 b& k& X; t7 E
sc.status,
& ?# M) ^# J7 C sc.type, 6 z c/ y6 P+ c9 b( e& S
sc.length, / J/ u, ]" f! ]: H) i
sc.usertype ,
! K, T6 \8 ~0 w) M sc.scale
6 p% b, Q! o \# S* }- R! e+ zFROM sysobjects so , 7 c, _/ j' n, G: v8 ?+ ?
syscolumns sc
8 k) ?, w$ s9 m5 o' D, m; XWHERE so.id = sc.id # @4 A* a* s% l/ a' f
ORDER BY so.type, so.name, sc.name
% k- Q$ a: w. w* F$ v4 z/* get definition of each stored procedure */0 t$ I9 h g, c" u
SELECT so.name, ( O/ A1 d, \ ~1 B5 ~& n
so.type, # @. @% S1 H: M3 X0 H1 J0 J3 o
sc.number,
3 {: C, J; O3 n0 O3 f4 f4 K! g+ [ sc.text 6 u& i H$ r; P$ o, Y3 r+ b
FROM sysobjects so , & i' D, X. E/ e
syscomments sc
5 x' C( {. t- g5 G3 `( ~( G: n7 zWHERE so.id = sc.id
2 f5 |+ X, X+ ^5 |ORDER BY so.type, so.name, sc.number |
|