使用 NAnt Task 进行 MS SQL Server 脚本验证






3.92/5 (7投票s)
2006年8月31日
2分钟阅读

37955

323
使用 NAnt 验证 MS SQL Server 脚本,以改进持续集成。
引言
ScriptValidatorTask 是一个 NAnt 任务,用于验证 Microsoft SQL Server 脚本,例如存储过程、函数、简单语句和视图。 它使用 SQL Server 的 NOEXEC
选项来验证脚本。
背景
自动化构建过程是持续集成的关键部分;一旦开始,您将再也不想回到过去。 您通过运行 NAnt 脚本来接收构建结果,并且参与项目的每个开发人员都必须在将更改提交到源代码存储库之前运行它。 NUnit 测试可以检查业务逻辑以及技术方面。 为了自动化,构建服务器(例如 CruiseControl.NET)是必不可少的 - 每次开发人员将更改提交到存储库时,监听构建服务器都会启动构建过程并通知开发人员。
不幸的是,诸如存储过程和视图之类的 SQL 脚本在此过程中未经过验证。 通常的代码将被编译,但是 SQL 脚本必须根据数据库进行检查。 因此,产生了 SQL 脚本验证 NAnt 任务的想法。
我不会详细描述如何构建 NAnt 任务或如何验证脚本,但是您将在社区中找到有关此的更深入的知识。 我的目的是将这些东西放在一起,以便在自动化的构建环境中使用它们,以符合持续集成的概念。 验证的脚本仅限于 MS SQL Server。
使用代码
首先,您必须使用 <loadtasks>
向 NAnt 声明该任务。
...
‹loadtasks assembly=".\lib\NAnt.ScriptValidatorTasks.dll" /›
...
然后,您可以在构建脚本中使用新任务 scriptvalidate
。
...
‹scriptvalidate connection="data source=SQL Server;initial
catalog=Database;user=username;password=pwd;"›
...
为了验证脚本,需要连接到数据库服务器。 参数 connection
表示连接字符串。
FileSet scripts
定义要验证的脚本文件。
...
<scripts basedir=".\"›
<include name="*.sql"/›
<include name="*.prc"/›
<exclude name="SPTest.prc"/›
</scripts›
...
现在,可以在 NAnt 构建过程中验证 SQL Server 脚本。
关注点
我的 SQL Server 脚本包含许多 GO
语句。 每个存储过程脚本都会删除数据库中已存在的该过程,然后创建它。 必须这样做,因为 T-SQL 不支持像 Oracle 那样的 CREATE
OR REPLACE
。 ADO.NET 不支持 CommandText
中的 GO
语句,因此我必须在每次出现 GO
语句时将每个 CommandText
分割成许多单个 CommandText
。
不幸的是,SQL Server 的编译器不是很严格。 当存储过程从数据库中不存在的表中进行选择时,不会引发错误或警告。 唯一的解决方法是编写您自己的 SQL 解析器和验证器。