T-SQL 2005:在一个事务中组合多个创建/更改过程调用

时间:2010-08-25 08:12:40

标签: sql-server-2005 tsql

我想构建一个T-SQL更改脚本,该脚本将数据库更改从开发到测试再到生产。 我把脚本分成了三个部分:

  1. DDL声明
  2. 存储过程的更改(创建和更改过程)
  3. 数据创建和修改
  4. 我希望在事务中完成这三个脚本中的所有更改。要么处理脚本中的所有更改,要么 - 在出错时 - 回滚所有更改。 我设法通过使用try / catch和begin事务语句为步骤1和3执行此操作。 我现在的问题是对存储过程做同样的事情。 在“创建存储过程”语句之前直接调用“begin transaction”会导致语法错误,告诉我“alter / create procedure statement必须是查询批处理中的第一个语句”。 所以我想知道如何在一个事务中组合多个create / alter procedure语句。

    非常感谢任何帮助; - )

    由于

4 个答案:

答案 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)

尝试将这些步骤放在工作中