我想构建一个T-SQL更改脚本,该脚本将数据库更改从开发到测试再到生产。 我把脚本分成了三个部分:
我希望在事务中完成这三个脚本中的所有更改。要么处理脚本中的所有更改,要么 - 在出错时 - 回滚所有更改。 我设法通过使用try / catch和begin事务语句为步骤1和3执行此操作。 我现在的问题是对存储过程做同样的事情。 在“创建存储过程”语句之前直接调用“begin transaction”会导致语法错误,告诉我“alter / create procedure statement必须是查询批处理中的第一个语句”。 所以我想知道如何在一个事务中组合多个create / alter procedure语句。
非常感谢任何帮助; - )
由于
答案 0 :(得分:2)
您可以使用动态SQL来创建存储过程。
EXEC ('CREATE PROC dbo.foo AS ....`)
这将避免错误“alter / create procedure statement必须是查询批处理中的第一个语句”
答案 1 :(得分:0)
试试这个:
begin transaction
go
create procedure foo as begin select 1 end
go
commit transaction
答案 2 :(得分:0)
BEGIN TRANSACTION
BEGIN TRY
-- Do your stuff here
COMMIT TRANSACTION
PRINT 'Successfull.'
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
ROLLBACK TRANSACTION
END CATCH
答案 3 :(得分:0)
尝试将这些步骤放在工作中