【发布时间】:2011-06-27 06:49:54
【问题描述】:
在 SQL Server 中创建存储过程后,为什么要将 Create 替换为 Alter?如果我们不更改它,执行时会发生什么?除了检查是否存在并丢弃之外,还有更好的替代方法吗?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql sql-server-2008
在 SQL Server 中创建存储过程后,为什么要将 Create 替换为 Alter?如果我们不更改它,执行时会发生什么?除了检查是否存在并丢弃之外,还有更好的替代方法吗?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql sql-server-2008
如果表存在,Create 将失败。如果表不存在,Alter 将失败。
如果你问为什么要使用Alter如果你可以drop和create的话,有几个原因:
【讨论】:
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
【讨论】:
根据我的经验,
每当您提供数据库构建时,最好检查存储过程是否存在以删除然后重新创建过程。
在调试过程时可能会发生从 create 更改为 alter 的情况,但这不是提供构建时的标准做法。
【讨论】:
关于有用的脚本,我更喜欢创建该过程(如果不存在,然后更改它)。
IF (select object_ID('schema.Procedure')) is null
exec('Create procedure schema.Procedure as select 1')
GO
Alter procedure dpm.TableCellLoad
这样,授予过程的权限将始终保留,如果过程不存在,则会创建它。
【讨论】: