如何在“ Formatted SQL Changelogs”中出现错误时停止liquibase迁移

时间:2019-01-10 16:51:30

标签: sql-server spring-boot liquibase

我正在使用liqubase作为spring-boot的bean。数据库是SQL Server 2012。

我希望迁移过程中由于错误而停止Web服务,但是liqubase只是将记录写入DATABASECHANGELOG表中并且不会停止。 有我的变更集:

--liquibase formatted sql
--changeset Dmitry_Atkaev:id
--preconditions onFail:HALT onError:HALT

    BEGIN TRANSACTION
        DECLARE @TableName NVARCHAR(128)
        SELECT @TableName = '[dbo].[table]'

        DECLARE @SQL NVARCHAR(MAX)

        SELECT
          @SQL = 'ALTER TABLE ' + @TableName + ' DROP CONSTRAINT ' + kc.name
        FROM
          sys.key_constraints kc
        WHERE
          kc.[type] = 'PK'
          AND kc.parent_object_id = OBJECT_ID(@TableName)

        EXEC SP_EXECUTESQL @SQL

        ALTER TABLE dbo.table ADD PRIMARY KEY (col1, col2)

        ALTER TABLE dbo.table DROP COLUMN col3
    COMMIT

我试图将我的迁移包装为try / catch块,如下所示:

    BEGIN
      BEGIN TRY
        -- query
      END TRY
      BEGIN CATCH
        THROW;
      END CATCH
    END;

但出现语法错误: Reason: liquibase.exception.DatabaseException: Incorrect syntax near 'THROW'. 有人知道正确的语法吗?

0 个答案:

没有答案