我正在寻找一种在更新应用程序版本后验证生产数据库上的 SQL 架构的方法。如果应用程序与数据库模式版本不匹配,则应该有一种方法来警告用户并列出所需的更改。

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

更新: Red Gate 列出“395 美元起”。有什么免费的吗?或者比只保留版本号更万无一失?

有帮助吗?

解决方案

试试这个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 

其他提示

我希望我能提供帮助 - 这是我建议阅读的文章:

自动比较SQL Server数据库模式

它描述了如何使用T-SQL,SSMS或第三方工具自动执行SQL Server架构比较和同步过程。

您可以通过查看两个数据库的数据字典(sys.objects,sys.columns等)并进行比较来以编程方式执行此操作。但是,还有像 Redgate SQL Compare Pro 这样的工具您。我现在已将此作为数据仓库系统QA工具的一部分指定,包括我目前正在进行的工作。在我目前的演出中,这根本不是问题,因为DBA已经在使用它了。

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

据我所知,除非你想写自己的,否则没有任何自由。 Redgate足够便宜,可能也是免费的。即使作为QA工具来证明生产数据库不在配置中,它也意味着它将在一次事故后为您节省购买价格。

您现在可以免费使用我的 SQL Admin Studio 来运行架构比较数据比较并同步更改。不再需要从此处下载许可证密钥 http://www.simego.com/Products/ SQL-管理员工作室

也适用于SQL Azure。

[更新:是的我是上述计划的作者,因为它现在免费我只是想与社区分享]

如果您正在寻找一种可以比较两个数据库的工具,并向您展示Red Gate的差异 SQL比较

您没有提到您正在使用的RDMBS:如果您的RDBMS中提供了INFORMATION SCHEMA视图,并且您可以从同一主机引用这两个模式,则可以查询INFORMATION SCHEMA视图以识别以下各项中的差异: -tables -列 - 列类型 - 约束(例如主键,唯一约束,外键等)

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

这有点乏味,但可能。

我发现这个小而免费的工具可以满足我的大部分需求。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

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

它只是一个小型免费实用程序,可以显示架构差异:)

制作一张桌子并将版本号存储在那里。只需确保根据需要进行更新。

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

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

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

也许这只是比较每个表的行数和索引计数的问题 - 如果您还需要担心触发器和存储过程版本,那么您需要更具工业性的东西

尝试 SQL Server 的 dbForge 数据比较. 。它可以比较和同步任何数据库,甚至是非常大的数据库。快速、简单,始终提供正确的结果。在您的数据库上尝试一下并评论该产品。

我们可以向您推荐一款可靠的 SQL 比较工具,它可以将 SQL Server 数据库中的表数据的比较和同步速度提高 3 倍。它是 SQL Server 的 dbForge Data Compare。

主要优点:

  • 更快地比较和同步大型数据库
  • 支持本机 SQL Server 备份
  • 表、列和架构的自定义映射
  • 用于调整比较和同步的多个选项
  • 生成比较和同步报告

加上 30 天免费试用和无风险购买,并提供 30 天退款保证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top