2008-10-03 41 views
15

我正在寻找更新应用程序版本后验证生产数据库上的SQL模式的方法。如果应用程序与数据库模式版本不匹配,则应提供警告用户并列出所需更改的方法。如何比较/验证sql模式

是否有一个工具或框架(以编程方式)使用内置功能来做到这一点? 还是有一些简单的算法来运行此比较?

更新:红色大门名单“从$ 395”。什么东西都免费?还是比保持版本号更简单?

+0

我已经改变了这一点,并添加了一个'redgate'标签,由于优先回应暗示它。 – ConcernedOfTunbridgeWells 2008-10-03 14:51:08

回答

22

试试这个SQL。
- 针对每个数据库运行它。
- 将输出保存到文本文件。
- 区分文本文件。

/* get list of objects in the database */ 
SELECT name, 
     type 
FROM sysobjects 
ORDER BY type, name 

/* get list of columns in each table/parameters for each stored procedure */ 
SELECT so.name, 
     so.type, 
     sc.name, 
     sc.number, 
     sc.colid, 
     sc.status, 
     sc.type, 
     sc.length, 
     sc.usertype , 
     sc.scale 
FROM sysobjects so , 
     syscolumns sc 
WHERE so.id = sc.id 
ORDER BY so.type, so.name, sc.name 

/* get definition of each stored procedure */ 
SELECT so.name, 
     so.type, 
     sc.number, 
     sc.text 
FROM sysobjects so , 
     syscomments sc 
WHERE so.id = sc.id 
ORDER BY so.type, so.name, sc.number 
+0

显然一个综合工具更好,但这是一个很好的快速和肮脏的方法! – Rory 2009-07-01 14:51:50

0

制作一个表格并在其中存储您的版本号。只要确保您根据需要进行更新即可。

CREATE TABLE version (
    version VARCHAR(255) NOT NULL 
) 
INSERT INTO version VALUES ('v1.0'); 

然后,您可以检查存储在数据库中的版本号是否与应用程序安装期间或任何方便的应用程序代码相匹配。

1

如果你正在寻找一种工具,可以比较两个数据库,并显示你的区别红门​​使得SQL Compare

8

你可以做到这一点通过编程在数据字典中寻找(sys.objects中,SYS.COLUMNS等。 )两个数据库并进行比较。但是,也有像Redgate SQL Compare Pro这样的工具可以帮助您。我已经指出这是现在几次数据仓库系统QA工具的一部分,包括我目前正在开发的一个。在我目前的演出中,这完全没有问题,因为这里的DBA已经在使用它了。

使用这些工具的基本方法是维护一个参考脚本,它构建数据库并将其保存在版本控制中。将脚本运行到临时数据库中,并将其与目标进行比较以查看差异。如果您觉得如此倾向,它也会生成补丁脚本。

据我所知,没有什么免费的,除非你想写自己的东西。雷德盖特便宜得足以让它免费。即使作为一种质量保证工具来证明生产数据库不在配置中,它意味着它会在一次事件后为您节省购买价格。

+0

我们爱SQL比较。它使事情变得非常简单。 – 2008-10-03 14:47:48

0

哪个RDBMS是这样的,潜在变化有多复杂?

或许这只是比较行数和索引数为每个表的问题 - 如果你有触发器和存储过程版本的担心还那么你需要更多的东西工业

1

你没有提到这RDMBS你使用:如果信息架构视图是在RDBMS中可用的,如果你能在同一台主机引用两种模式中,你可以查询信息架构视图识别差异: -tables - 列 - 列类型 -constraints(例如主键,唯一约束,外键等)

我已经为SQL Server上的这个目的编写了一组查询,以查找过去的工作 - 它很好地识别了差异。许多查询都使用带有IS NULL的LEFT JOIN来检查是否存在期望的项目,其他人正在比较列类型或约束名称等内容。

这是有点乏味,但它可能。

0

尝试dbForge Data Compare for SQL Server。它可以比较和同步任何数据库,甚至是非常大的数据库。快速,简单,始终提供正确的结果。 在数据库中尝试它并对产品发表评论。

我们可以为您推荐一个可靠的SQL比较工具,它可以提供3倍的SQL Server数据库中表数据的比较和同步。它是SQL Server的dbForge数据比较。

主要优点:大型数据库的

  • 更快的比较和同步
  • 机SQL Server的
  • 支持备份表,列和
  • 多种选项来调整您的比较模式的
  • 自定义映射和同步
  • 生成比较和同步报告

加上30天免费试用和30天退款保证的无风险购买。

4

您现在可以使用我的SQL管理工作室免费运行模式比较数据比较和同步更改。不再需要从这里下载许可密钥http://www.simego.com/Products/SQL-Admin-Studio

也适用于SQL Azure。

[更新:是的,我上面的程序的作者,因为它现在是免费我只是想与社会各界分享]

1

我发现这个小和免费的工具,适合我的大多数需求。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

这是非常基本的,但它显示了两个数据库的架构差异。 它没有任何花哨的东西,比如自动生成的脚本,使差异消失,它不会比较任何数据。

这只是一个小的,免费的实用工具,显示你的架构差异:)