|
我正在寻找一种在更新应用程序版本后在生产数据库上验证SQL模式的方法。如果应用程序与数据库模式版本不匹配,则应该有一种警告用户并列出所需更改的方法。3 g! `/ T: x0 F2 V
是否存在具有内置功能的工具或框架(以编程方式使用)?还是有一些简单的算法可以进行这种比较?
4 E2 A# G$ |0 i9 R
3 g$ v. s/ G, a2 g- ]更新: 红色大门列出了“ 395美元起”。有什么免费的吗?还是比保留版本号更简单?
, y }2 B% r0 Y6 E3 F6 W
& r+ N8 [1 r5 V$ U6 w: c6 ?' n
, Z/ ?: `& D* G# j, R& k解决方案:& B* c" R9 {- q/ v
1 E+ r$ X8 \) w r% h! m5 d- r. M
$ v# y# ]7 n1 O" k" `
# H2 _- N8 \8 w4 K2 g 试试这个SQL。8 Q$ l1 E+ h+ S* {7 Y7 N( `8 T
-针对每个数据库运行它。) r* p: N5 {7 f, y- ?
-将输出保存到文本文件。
0 W- o" @9 X" c* m) Z! H-区分文本文件。 0 a( ]6 C8 B* D2 P; [
/* get list of objects in the database */ W. C+ p1 j w" }9 @& `; a
SELECT name, 7 Q2 f7 ?* h2 P1 A
type
3 n7 R G$ R5 ]6 cFROM sysobjects' ~) Q) D/ ^: J: |! F) x( D2 F
ORDER BY type, name
/ `$ n$ `9 M; s9 J" u2 l& G! k/* get list of columns in each table / parameters for each stored procedure */
: H5 b+ P/ ^" Y/ s, J( g' `) H# M5 e; {SELECT so.name,
5 p& Q5 m: ^: q6 G% l/ O so.type, ! j3 `/ R2 \! z. T( P
sc.name, : v+ G+ C. ]: v2 y, ^2 K0 q, U" v
sc.number, ; a, L4 z h; W F% [" W
sc.colid,
c: u6 {4 T# ^& z, w% z" l8 t sc.status,
3 S6 y* }0 l! ~ sc.type, 8 Q" u3 T* h; Q& S/ L8 y4 A
sc.length,
. i$ E& B+ b/ c' f/ T$ U+ r sc.usertype , 7 G1 s8 v4 n* J& B* u0 Q0 i6 L+ p
sc.scale
0 j& g2 @0 T: D/ zFROM sysobjects so , / C5 p% j9 ?% v/ g5 r ~$ C4 B
syscolumns sc
5 q) J: ]- D. g$ a% nWHERE so.id = sc.id
. s3 S& J4 u# s/ Z9 D' h3 sORDER BY so.type, so.name, sc.name
) `! U$ a( i; ~2 p! q/* get definition of each stored procedure */
# R% j( `& r, X* p) DSELECT so.name, 5 Y8 K- L8 ]9 u
so.type,
0 m- n9 H8 L! }. v4 w$ u# `' B( } sc.number, ; i) r; Q- m C# s' K/ U
sc.text
2 K* Y+ S2 t4 w+ }5 L0 XFROM sysobjects so ,
) c; Q, H+ n' o1 x syscomments sc
$ `. c. K- d" R* Z `1 d0 V! MWHERE so.id = sc.id ' b# H8 W, o$ ~
ORDER BY so.type, so.name, sc.number |
|