在CREATE存储过程中添加DROP的真正原因

时间:2014-07-05 05:32:01

标签: stored-procedures

我只是想知道创建和执行存储过程的最佳做法是什么。

我见过如下: -

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Foo')
  DROP PROCEDURE Foo
  GO

CREATE PROCEDURE dbo.Foo

但是我在想,当我们执行这个存储过程时,它将删除存储过程并创建一个新过程。但是如果创建存储过程语法中存在错误,它将不会重新创建存储过程,对吧?因此,我们现有的存储过程将被删除,并且不会创建新的存储过程。那么在这里添加DROP的真正原因是什么?

2 个答案:

答案 0 :(得分:1)

原因是您的脚本可以idempotent方式运行 - 它们可以根据需要运行多次,结果相同。也就是说,您的数据库将具有您想要的存储过程。您的程序将被创建,并在需要时预先删除。如果你没有这样做,那么你需要单独删除并创建脚本。

如果您担心自己的脚本有错误,请修复它们。运行您的脚本几次,并解决出现的任何问题。这项工作不值得维护单独的脚本集。

答案 1 :(得分:0)

因为它是逐行执行的,所以当它创建过程然后错误一次又一次地重新创建该过程然后它会给出错误,因为它已经在您的数据库中生成了错误代码....

所以为此它想再次重建那个程序.....

你可以使用alter而不是create ....

希望这能帮到你......