打破SQL脚本

时间:2009-06-02 20:47:38

标签: sql-server sql-server-2005

我正在编写一个相当长的SQL脚本,它运行接近2000行代码。由于理解长脚本变得非常困难,我想将其分解为逻辑单元并将其与其他SQL文件分开。

这样做的最佳方法是什么?每个逻辑单元是否需要是存储过程?也许是UDF?

6 个答案:

答案 0 :(得分:2)

利用存储过程和函数。如果您正在使用纯SQL,那么代码的逻辑单元就没有更好的位置了。此外,它使维护/编辑代码变得更加容易。

话虽这么说,如果你的脚本那么长,你可能想看看你正在做什么,并考虑另一种脚本语言,甚至是C#/ LINQ。有时将它全部保存在SQL中是有意义的,有时候你会强迫某些东西进入SQL,但只有你能做出决定。

此外,C#或其他脚本语言可以轻松地与源代码控制集成。只是要考虑的事情!

答案 1 :(得分:0)

首先,2000行的SQL在文件中的数量不是很大(DDL通常对于适度大的数据库运行这么多或者更多)。但是,在一个过程中有太多的东西!实现这一目标的方法确实是将逻辑组件分解为单独的过程。除非您有一个特定的瓶颈要克服或在SQL中不容易完成的操作,否则您将不需要UDF。

最后一条忠告:考虑通过视图简化数据访问。

顺便说一句:你想用这么大的过程来完成什么?我使用T-SQL做了大量的工作,我从来没有接近2000行代码!

答案 2 :(得分:0)

如果您使用UDF,请确保您知道标量和内联之间的区别:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/05/23/reuse-your-code-with-cross-apply.aspx

答案 3 :(得分:0)

你用它来分解它可能会因你正在做什么而有所不同。

这类似于任何编程语言,广告脚本/功能太大,需要分解。

如果您的脚本因相同或类似的查询而变大,则可以通过将这些查询添加为视图来减少脚本。

存储过程和用户​​定义的函数也是另一种好方法,具体取决于代码的作用。

答案 4 :(得分:0)

这似乎是一批代码的很多代码。

将每个逻辑步骤/过程(即创建订单/调度订单/注册客户)分解为单独的存储过程。您可能会发现创建流程图并使用它来帮助分解T-SQL代码批处理的位置很有用。

如果您尝试使用T-SQL执行计算逻辑,则将此类操作移至托管代码(如CLR函数等)。

答案 5 :(得分:0)

将其分解为多个sps,添加try-catch块和错误处理(记住,除以0不是可捕获的错误),并设置一个作业以按顺序执行每个sp。