CREATE PROCEDURE必须是批处理中的第一个语句。我通常会这样:
IF EXISTS ( SELECt type_desc, type FROM sys.procedures WITH(NOLOCK) WHERe NAME = 'myProc' AND type = 'P' ) DROp PROCEDURE dbo.myProcGOCREATE PROC dbo.myProcAS.... GO GRANT EXECUTE ON dbo.myProc TO MyUser
(不要忘记授予声明,因为如果您重新创建proc,它们将会丢失)
部署存储过程时要考虑的另一件事是,删除可以成功而创建失败。出现问题时,我总是使用回滚来编写SQL脚本。只要确保您不会在结尾时意外删除提交/回滚代码,否则您的DBA可能会在气管中将您吊起踢:)
BEGIN TRAN IF EXISTS ( SELECT type_desc, type FROM sys.procedures WITH(NOLOCK) WHERe NAME = 'myProc'AND type = 'P' )DROp PROCEDURE myProc GOCREATE PROCEDURE myProcAS --proc logic hereGO-- BEGIN DO NOT REMOVE THIS CODE (it commits or rolls back the stored procedure drop) IF EXISTS( SELECT 1 FROM sys.procedures WITH(NOLOCK) WHERe NAME = 'myProc' AND type = 'P' ) COMMIT TRAN ELSE ROLLBACK TRAN-- END DO NOT REMOVE THIS CODE
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)