2008-09-17 35 views
2

我即将继承一套庞大而复杂的存储过程集,每月对大量数据集进行处理。如何维护大型t-sql程序

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

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

任何使t-sql没有太多头痛的经验是非常受欢迎的。

回答

4

首先,创建一个包含.sql文件的目录并将它们保存在那里。将这组.sql文件添加到版本控制系统。 SVN运作良好。有一个工具将这些加载到数据库中,覆盖现有的数据库。

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

您现在可以尽可能多地重构您的过程,然后运行测试以确认正确的功能。

0

一件事,你可以做的是/有一个自动化的脚本来存储所有更改源控件,以便您可以查看到程序的改变(使用以前和当前版本差异)

2

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

SQLinForm是所有主流数据库(ORACLE,SQL服务器,DB2/UDB中,Sybase,Informix的和PostgreSQL,MySQL的等)有许多格式选项自动SQL代码格式化。

2

通过重新格式化代码,尤其是缩进,开始。

然后模块化SQL。在他们自己的独立文件中将块分成更小的,描述性命名的过程和函数。仅凭这一点,我发现可以很好地改善对大型SQL文件的理解。

1

尝试尽可能模块化SQL,并拥有一组测试,以便您在需要时维护,重构和添加功能。我曾经有幸继承了一条总计5000行的存储过程,我仍然对此有恶梦。一旦项目结束,我将存储的proc打印出来,以便在此过程中使X树破坏。在我们其中一家公司的每周举办的会议中,我首尾相接,它贯穿了整个建筑。以此为例说明如何不编写和维护存储过程。

2

ApexSQLScript是一个用于编写整个数据库的好工具 - 然后您可以将其检入到源代码管理中并管理更改。

我还发现,记录sprocs始终可让您使用有关sys.sql_modules中源代码的数据提取有关它们的信息 - 您可以使用标记或任何其他信息来帮助文档子系统。另外,使用模式(或甚至多个数据库) - 这将确实有助于将数据库划分为逻辑单元并指出体系结构问题。

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

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

0

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