ALTER vs DROP&在SQL Server中创建

时间:2011-06-27 06:49:55

标签: sql sql-server sql-server-2005 tsql sql-server-2008

在SQL Server中创建存储过程后,为什么要用Create替换Alter?如果我们不改变它会在执行时发生什么?有没有更好的替代品,然后检查是否存在并放弃?

4 个答案:

答案 0 :(得分:7)

如果表存在,

Create将失败。如果表不存在,Alter将失败。

如果您可以放弃并创建,请问为什么要使用Alter,原因如下:

  • 已经分配给该对象的某些权限,如果删除它,则需要重新授予权限
  • 对象可能被其他具有架构绑定的对象使用

答案 1 :(得分:1)

从我的学习中,

  • 每当您提供数据库构建时,最好检查存储过程是否存在以删除然后重新创建过程。

  • 在调试过程时可能会发生从创建更改为更改但在提供构建时这不是标准做法。

答案 2 :(得分:1)

SQL Server中没有“CREATE OR REPLACE”语法(就像在其他RDBMS中一样)

如果我不确定某些东西存在,我倾向于使用这种模式。

IF OBJECT_ID('dbo.MyProc') IS NOT NULL
   DROP PROC dbo.MyProc
GO
CREATE PROC dbo.MyProc
...
GO
GRANT EXECUTE ---
GO

答案 3 :(得分:1)

关于有用脚本的主题,我更喜欢创建过程(如果不存在),然后改为修改它。

IF (select object_ID('schema.Procedure')) is null
    exec('Create procedure schema.Procedure as select 1')
GO

Alter procedure dpm.TableCellLoad

这样,授予程序的权限将始终保留,如果程序不存在则会创建。