如何在Liquibase格式化SQL更改日志中定义参数

时间:2016-04-21 14:09:20

标签: sql-server liquibase

我有一个像这样编写的SQL

DECLARE @CurrencyIdEUR INT = 1;
INSERT Currency (Id, CurrencyCode) VALUES (@CurrencyIdEUR, 'EUR');
INSERT Price (Price, Currency) VALUES (123.45, @CurrencyIdEUR);

我想将它添加到Liquibase格式的SQL中,但我不知道如何添加这种类型的参数。有一个密切的讨论,但不是他们写的“如何”-part,herehere on the Liquibase page,这是可能的,但不是如此。

--liquibase formatted sql

--property name:CurrencyIdEUR value:1

--changeset Stix:123
INSERT Currency (Id, CurrencyCode) VALUES (${CurrencyIdEUR}, 'EUR');
...

这是我最近的尝试。如果你能提供正确的零件,我将非常高兴。

2 个答案:

答案 0 :(得分:3)

TL / DR:看起来它没有为sql changelogs实现 - 但属性是从xml changelogfile传递的。

我查看了FormattedSqlChangeLogParser的代码,找不到任何对属性解析的引用。

作为解决方法,您可以在xml changelog文件中输入属性。这也将使该属性可用于所有sql脚本。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog ...>

    <property name="CurrencyIdEUR" value="555"/>

    <include relativeToChangelogFile="true" file="DoStuff.sql" />

</databaseChangeLog>

在DoStuff.sql中:

--changeset peter.henell:dostuff-procedure endDelimiter:\nGO splitStatements:true
CREATE PROCEDURE DoStuff
AS
BEGIN
    SELECT 1, 2, ${CurrencyIdEUR};
END

答案 1 :(得分:3)

This feature has been added in Liquibase 3.5.0, which was released today (April 21, 2016)