我即将继承一组大型且复杂的存储过程,这些存储过程每月对非常大的数据集进行处理。

我们正在调试它们,以便它们与用 VB6 编写的原始流程相匹配。他们决定用 t-sql 重新编写它们的原因是因为 vb 过程需要几天的时间,而这个新过程需要几个小时。

所有这些都很好,但是我怎样才能使这些现在大量的 t-sql 代码(1.5k+ 行)甚至可以远程读取/维护。

任何使 t-sql 不再令人头疼的经验都是非常受欢迎的。

有帮助吗?

解决方案

首先,创建一个充满 .sql 文件的目录并在那里维护它们。将这组 .sql 文件添加到修订控制系统。SVN 运行良好。有一个工具可以将这些加载到您的数据库中,覆盖任何现有的。

拥有一个测试数据库和基线报告,显示每月处理的输出应该是什么样子。您的测试还应该采用版本控制下的 .sql 文件的形式。

您现在可以根据需要重构您的过程,然后运行测试以确认正确的功能。

其他提示

对于格式化/美化 SQL,我已经成功了 http://www.sqlinform.com/ - 您可以尝试免费的在线版本,也可以使用桌面版本。

SQLinForm 是一个自动 SQL 代码格式化程序,适用于所有主要数据库(ORACLE、SQL Server、DB2 / UDB、Sybase、Informix、PostgreSQL、MySQL 等),具有许多格式化选项。

肯定要从重新格式化代码开始,尤其是缩进。

然后将SQL模块化。将块拉出到更小的、描述性命名的过程和函数中,并放在它们自己的独立文件中。我发现仅此一点就可以很好地提高我对大型 SQL 文件的理解。

ApexSQLScript 是一个很棒的工具,用于编写整个数据库的脚本 - 然后您可以将其签入源代码管理并管理更改。

我还发现,一致地记录存储过程可以让您使用 sys.sql_modules 中源代码的数据提取有关它们的信息 - 您可以使用标签或其他任何方式来帮助记录子系统。

另外,使用模式(甚至多个数据库)——这确实有助于将数据库划分为逻辑单元并指出体系结构问题。

就大型代码而言,我最近发现 SQL2005 CTE 功能在管理具有大量嵌套查询(甚至不是递归)的代码时非常有用。可以声明和构建 CTE,然后在最终语句中使用,而不是管理一堆嵌套和缩进。这也有助于重构,因为删除冗余的嵌套查询和列似乎更容易。

存储过程和 UDF 对于管理大型代码库和消除暗角至关重要。我还没有发现视图非常有帮助,因为它们不可参数化(如果结果集很小,在这些情况下可以使用 UDF)。

尝试尽可能模块化 SQL,并进行一组测试,使您能够在需要时维护、重构和添加功能。我曾经有幸继承了一个总共 5000 行的存储过程,但我仍然会做噩梦。项目结束后,我打印了存储过程,以在这个过程中破坏 X 树。在我们公司的一个每周站立会议上,我把它首尾相连,它延伸到了建筑物的整个长度。将此作为如何不编写和维护存储过程的示例。

您可以做的一件事是使用自动化脚本来存储对源代码控制的所有更改,以便您可以查看对过程的更改(使用先前版本和当前版本的差异)

它绝对不是免费的,但为了保持 T-SQL 格式一致,Redgate Software 的 SQL提示 非常方便。只要你的过程的语法是正确的,几次击键(Ctrl+K,Y)将立即重新格式化它。这些选项使您可以很好地控制 SQL 的格式。

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