database - 单元测试 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 脚本,应该如何进行单元测试?静态分析...
解决方案
15 年前,我通过大量脚本编写了您要求的类似操作。但是我们有特殊的报表格式。
我们有三种不同类型的文件:
- 一个 SQL 文件来设置完整数据库模式的最新版本
- 一个文件,所有更改都适用于旧数据库模式(自定义格式,如版本;SQL)
- 代码在数据库上使用的 SQL 语句的一个文件(自定义格式,如语句编号;语句)
要求每条语句都在一行,以便可以用 awk 提取!
1)首先,我通过在另一个之后执行 from 语句并将错误记录到文件中来设置最新版本的数据库。
2)其次,我对所有更改都做了同样的事情,以获得第二个模式
3)我比较了两个数据库模式以发现任何差异
4)我在完整的最新模式中填写了一些虚拟测试值进行测试
5) 最后但并非最不重要的一点是,我使用测试数据针对最新模式执行了每个 SQL 语句,并再次记录了每个错误。
最后,整个事情每天晚上都在运行,没有一个早上没有新的错误,这是 20 位开发人员中的一位在版本控制中投入的。但它为我们在下一次安装新客户时节省了很多时间。
推荐阅读
- python - 忽略 re 上的引号
- python - 用户操作后,django 不返回任何内容/返回完全相同的位置
- cuda - MIO 油门失速何时发生?
- kubernetes - Helm 3 的 Kubernetes 权限安装到特定命名空间
- haskell - Raku 中的类似 Haskell 的模式匹配
- haskell - 无法推断(浮动 a)因使用“pi”而产生
- javascript - 迭代 Firebase 存储 URL 时如何在 React 中使用 Async 和 Await
- web-services - 从 Xamarin Forms 调用 asmx Web 服务
- reactjs - 输入 URL 时反应路由器路径不会改变
- bash - jenkinsfile if 语句不使用通配符语句