Liquibase 去除分号
Liquibase removes semicolons
我有一个 liquibase 更新日志文件,其中包含一些我用标签完成的插入语句,但不知何故,当我从更新日志(对于 SQL 服务器数据库)生成 SQL 文件时,它删除了语句末尾的分号。在我的变更日志文件中,它看起来像这样:
<changeSet author="Ferid (generated)" id="1528876614155-371-MSSQL-58">
<preConditions onFail="MARK_RAN" onSqlOutput="TEST">
<dbms type="mssql" />
</preConditions>
<sql>
BEGIN TRAN;
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'I', 41, (select res_id FROM result_def where mai_id = 41 and res_name='MAI_MPO'),0,1);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 51, (select res_id FROM result_def where mai_id = 51 and res_name='MAI_OPE'),0,2);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 52, (select res_id FROM result_def where mai_id = 52 and res_name='MAI_OPR'),0,3);
commit;
</sql>
<rollback/>
</changeSet>
但是从它生成的 SQL 文件看起来像这样:
-- Changeset C:/Users/Ferid/Documents/Box Sync/PRIVATE_Ferid/liquibase-3.5.5-bin/sdk/workspace/changelog/com/example/newChangelogModInserts.xml::1528876614155-371-MSSQL-58::Ferid (generated)
BEGIN TRAN
GO
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'I', 41, (select res_id FROM result_def where mai_id = 41 and res_name='MAI_MPO'),0,1)
GO
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 51, (select res_id FROM result_def where mai_id = 51 and res_name='MAI_OPE'),0,2)
GO
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 52, (select res_id FROM result_def where mai_id = 52 and res_name='MAI_OPR'),0,3)
GO
commit
GO
为什么会发生这种情况,我该如何预防?
我发现了,我只需要在 <sql>
标签中添加 splitStatements="false"
,它根本没有格式化 SQL 语句:
<changeSet author="Ferid (generated)" id="1528876614155-371-MSSQL-58">
<preConditions onFail="MARK_RAN" onSqlOutput="TEST">
<dbms type="mssql" />
</preConditions>
<sql splitStatements="false">
BEGIN TRAN;
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'I', 41, (select res_id FROM result_def where mai_id = 41 and res_name='MAI_MPO'),0,1);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 51, (select res_id FROM result_def where mai_id = 51 and res_name='MAI_OPE'),0,2);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 52, (select res_id FROM result_def where mai_id = 52 and res_name='MAI_OPR'),0,3);
commit;
</sql>
<rollback/>
</changeSet>
我有一个 liquibase 更新日志文件,其中包含一些我用标签完成的插入语句,但不知何故,当我从更新日志(对于 SQL 服务器数据库)生成 SQL 文件时,它删除了语句末尾的分号。在我的变更日志文件中,它看起来像这样:
<changeSet author="Ferid (generated)" id="1528876614155-371-MSSQL-58">
<preConditions onFail="MARK_RAN" onSqlOutput="TEST">
<dbms type="mssql" />
</preConditions>
<sql>
BEGIN TRAN;
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'I', 41, (select res_id FROM result_def where mai_id = 41 and res_name='MAI_MPO'),0,1);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 51, (select res_id FROM result_def where mai_id = 51 and res_name='MAI_OPE'),0,2);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 52, (select res_id FROM result_def where mai_id = 52 and res_name='MAI_OPR'),0,3);
commit;
</sql>
<rollback/>
</changeSet>
但是从它生成的 SQL 文件看起来像这样:
-- Changeset C:/Users/Ferid/Documents/Box Sync/PRIVATE_Ferid/liquibase-3.5.5-bin/sdk/workspace/changelog/com/example/newChangelogModInserts.xml::1528876614155-371-MSSQL-58::Ferid (generated)
BEGIN TRAN
GO
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'I', 41, (select res_id FROM result_def where mai_id = 41 and res_name='MAI_MPO'),0,1)
GO
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 51, (select res_id FROM result_def where mai_id = 51 and res_name='MAI_OPE'),0,2)
GO
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 52, (select res_id FROM result_def where mai_id = 52 and res_name='MAI_OPR'),0,3)
GO
commit
GO
为什么会发生这种情况,我该如何预防?
我发现了,我只需要在 <sql>
标签中添加 splitStatements="false"
,它根本没有格式化 SQL 语句:
<changeSet author="Ferid (generated)" id="1528876614155-371-MSSQL-58">
<preConditions onFail="MARK_RAN" onSqlOutput="TEST">
<dbms type="mssql" />
</preConditions>
<sql splitStatements="false">
BEGIN TRAN;
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'I', 41, (select res_id FROM result_def where mai_id = 41 and res_name='MAI_MPO'),0,1);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 51, (select res_id FROM result_def where mai_id = 51 and res_name='MAI_OPE'),0,2);
INSERT INTO pdc_matrix (pattern_id, prod_ins_level, mai_class_id, result_id, y_or_r, and_level)
values (1012, 'A', 52, (select res_id FROM result_def where mai_id = 52 and res_name='MAI_OPR'),0,3);
commit;
</sql>
<rollback/>
</changeSet>