当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

t sql-t-sql 2005:在一个事务中合并多个create alter过程调用

admin 157℃
我想构建一个t-sql变更脚本,将数据库变更从开发到测试再到生产。 我把剧本分成三部分:

  1. DDL语句
  2. 存储过程的更改(创建和更改过程)
  3. 数据创建和修改

我希望这三个脚本中的所有更改都在事务中进行。要么处理脚本中的所有更改,要么在出现错误时回滚所有更改。 我使用try/catch和begin事务语句在步骤1和3中成功地做到了这一点。 我现在的问题是对存储过程执行同样的操作。 直接在'create stored procedure'语句之前调用'begin transaction'会导致语法错误,告诉我'alter/create procedure语句必须是查询批中的第一个语句'。 所以我想知道如何在一个事务中组合多个create/alter过程语句。

非常感谢您的帮助;-)

谢谢

您可以使用动态SQL创建存储过程。

EXEC ('CREATE PROC dbo.foo AS ....`)

这将避免错误'alter/create procedure statement must be the first statement in a query batch'

试试这个:

begin transaction
    go
    create procedure foo as begin select 1 end
    go
commit transaction

尝试将这些步骤放入作业中

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

转载请注明:我的代码 » t sql-t-sql 2005:在一个事务中合并多个create alter过程调用