Как остановить миграцию ликвидазы при ошибке в «Форматированных журналах изменений SQL» - PullRequest
0 голосов
/ 10 января 2019

Я использую жидкостную базу в качестве боба пружинной загрузки. База данных - SQL Server 2012.

Я ожидаю остановки веб-службы из-за ошибки во время миграции, но 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

Я пытался обернуть свою миграцию, чтобы попытаться / поймать блок следующим образом:

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

но получите синтаксическую ошибку: Reason: liquibase.exception.DatabaseException: Incorrect syntax near 'THROW'. Кто-нибудь знает правильный синтаксис для этого?

...