首页 > 解决方案 > 单元测试 SQL 脚本

问题描述

对于以下用.sql文件编写的脚本:

if not exists (select * from sys.tables where name='abc_form')
    CREATE TABLE abc_forms (
        x BIGINT IDENTITY, 
        y VARCHAR(60), 
        PRIMARY KEY (x)
    )

上面的脚本在表名中有一个错误。

对于像 Java/C 这样的编程语言,编译器可以帮助解决大多数名称解析

对于任何 SQL 脚本,应该如何进行单元测试?静态分析...

标签: databaseunit-testingtsqlsonarqube

解决方案


15 年前,我通过大量脚本编写了您要求的类似操作。但是我们有特殊的报表格式。

我们有三种不同类型的文件:

  • 一个 SQL 文件来设置完整数据库模式的最新版本
  • 一个文件,所有更改都适用于旧数据库模式(自定义格式,如版本;SQL)
  • 代码在数据库上使用的 SQL 语句的一个文件(自定义格式,如语句编号;语句)

要求每条语句都在一行,以便可以用 awk 提取!

1)首先,我通过在另一个之后执行 from 语句并将错误记录到文件中来设置最新版本的数据库。

2)其次,我对所有更改都做了同样的事情,以获得第二个模式

3)我比较了两个数据库模式以发现任何差异

4)我在完整的最新模式中填写了一些虚拟测试值进行测试

5) 最后但并非最不重要的一点是,我使用测试数据针对最新模式执行了每个 SQL 语句,并再次记录了每个错误。

最后,整个事情每天晚上都在运行,没有一个早上没有新的错误,这是 20 位开发人员中的一位在版本控制中投入的。但它为我们在下一次安装新客户时节省了很多时间。


推荐阅读