你如何维护大型的t-sql程序

时间:2008-09-17 16:08:52

标签: sql-server tsql maintainability

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

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

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

非常欢迎任何使t-sql头痛不大的经验。

7 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

  

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

答案 2 :(得分:2)

明确地从重新格式化代码开始,特别是缩进。

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

答案 3 :(得分:2)

ApexSQLScript是编写整个数据库脚本的绝佳工具 - 然后您可以将其检入源代码管理并管理更改。

我还发现,一直记录sprocs可以让你使用sys.sql_modules中有关源代码的数据来获取有关它们的信息 - 你可以使用标签或其他任何东西来帮助记录子系统。

此外,使用Schemas(甚至是多个数据库) - 这将真正有助于将数据库划分为逻辑单元并指出架构问题。

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

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

答案 4 :(得分:1)

尝试尽可能地模块化SQL,并提供一组测试,使您能够在需要时维护,重构和添加功能。我曾经有幸继承了总计5000行的存储过程,我仍然对此做噩梦。一旦项目结束,我打印出存储过程,以便在此过程中摧毁X树。在我们公司的每周一次的站立会议期间,我将它放在一起,并且在整个建筑物的长度上都是如此。我将此作为如何不编写和维护存储过程的示例。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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