我应该跨嵌套存储过程共享临时表吗?

时间:2014-01-06 15:57:13

标签: sql sql-server stored-procedures temp-tables

我目前正在尝试清理一些存储过程。其中大约有20个看起来非常相似并且执行许多相同的操作,但是采用稍微不同的参数并以不同方式过滤数据。

在大多数情况下,所有存储过程都是通过将一些数据加载到一个或两个表变量(通常是procs不同的地方)开始的。之后,每个sproc的所有代码或多或少都相同。他们执行一些日志记录并应用一些额外的常用过滤器。

我想至少将常见的部分转换为存储过程,以便代码更容易阅读,我们不必打开20个程序来更新同一行的sql,但使用表变量可以防止它。我们正在使用Sql Server 2005,据我所知,我们不能在存储过程中使用表值参数。

但是,我们可以将所有表变量更改为临时表,并在新的公共存储过程中引用它们。我认为这是一种相当普遍的做法,但想知道这是不是一个好主意。

在嵌套存储过程中,我是否应该假设临时表已经在别处创建并且只是查询它?我可以测试表是否存在,但如果不存在则该怎么办? 2005年有一个很好的替代品吗?打开其中一个嵌套存储过程并查看在其他地方创建的临时表的其他开发人员是否会感到困惑?我只需要添加大量内容丰富的评论吗?

1 个答案:

答案 0 :(得分:1)

在你的嵌套过程中;可以肯定的是,您可以检查表是否存在。如果不存在则RAISERROR带有一些错误消息。因为,您使用的是SS2005,#temptable将是您的选择。评论您的代码是为了便于阅读,这绝不是一种不好的做法。

谈论命名惯例;遵循任何更适合您组织的惯例(我只是给SP一个适当的名称,以反映SP的目的)。如果发生代码更改,则相应地更改注释是开发人员的责任。除此之外,无论你做什么看起来都是正确的。

相关问题