我正在使用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'.
有人知道正确的语法吗?