存储过程是否应在执行时检查潜在问题?

时间:2010-08-04 07:25:18

标签: sql tsql stored-procedures

让我稍微解释一下这个问题:)

我正在为新产品编写一堆存储过程。 它们只会被c#应用程序调用,由开发人员编写,他们遵循我给出的相同技术规范。 我不能进入真正的技术规范,所以我会给出一个足够接近的例子:

在技术规范中,我们必须将文件数据存储在几个专有的zip文件中,数据库存储zip中每个文件的名称和位置(例如,每个zip文件一个数据库)

现在,让我们说这个技术规范指出,要执行“操作A”,必须执行以下步骤:

1:计算要添加的文件的空间要求

2:获取zip文件及其数据库连接字符串列表(调用存储过程“GetZips”)

2:在zip文件中找到一个合适的位置来存储文件(针对每个数据库连接调用存储过程“GetSuitableFileLocation”,直到找到合适的文件)

3:在第2步中,您将在zip中为您提供一个开始/结束点以添加您的文件。 调用“AllocateLocationToFile”存储过程,传入这些值,然后将文件添加到zip。

好的 - 所以问题是,如果“AllocateLocationToFile”重新检查指定的开始/结束点仍然是“免费”,如果没有,是否会引发异常?

在办公室里对此进行了一些讨论,虽然我认为它应该检查并提出,但其他人认为它不应该,因为开发人员事先立即调用“GetSuitableFileLocation”是没有必要的。 / p>

我可以要求一些有价值的操作吗?

3 个答案:

答案 0 :(得分:3)

一般来说,最好尽可能安全。调用代码永远不应该依赖外部代码(sps是一种外部代码)。这个想法是你无法预测将来会发生什么。新人来到公司...... sps被送到另一个团队等等......

就个人而言,B()在A()之后的事实并不保证任何事情。无论出于何种原因改变这种情况都不是不可能的。

团队永远不应该根据“我们要保持这个,完全没有问题”来做出决定,因为他们可能会被解雇,公司可能会出售产品等等。

我的建议是进行检查,对代码进行分析以及是否真的是将其删除的瓶颈,但是写一下这个可以突破的地方!。

答案 1 :(得分:1)

鉴于你正在操纵文件,这可能造成所有潜在的破坏,我会说在这种情况下风险(损害成分)足够高,要谨慎。

而Svetlozar是对的:如果巨大的成功会导致重复使用或其他附加应用程序怎么办?不是每个人都可能像你的团队一样表现良好。

答案 2 :(得分:0)

这可能是一个好主意的一个原因将涉及竞争条件。两个用户是否可以同时调用该进程并获得相同的值?请至少使用当前设计的流程测试此方案。