Liquibase CSV loadData 失败,带引号的字符串包含逗号

Posted

技术标签:

【中文标题】Liquibase CSV loadData 失败,带引号的字符串包含逗号【英文标题】:Liquibase CSV loadData fails with quoted string containing a comma 【发布时间】:2020-06-09 02:09:10 【问题描述】:

我正在尝试使用 Liquibase 更改日志集将 CSV 文件加载到 SQLserver 表中。 当将 XLSX 文件保存为 CSV 文件时,包含逗号的列保存在双引号中(请参见下面的第三个值),按照标准,这很好,但 liquibase 忽略双引号并考虑双引号内的逗号。

13,OV,糖尿病门诊自我管理培训服务个体,每30分钟”,77.82,1,0,1/4/2016,,G0108

来自命令行终端的错误消息:


CSV 文件 v2.1/r21/TestData20212021.csv 第 21 行定义了 10 个值,标题有 9 个。数字必须相等(检查带有嵌入逗号的未引用字符串)


<changeSet  author="sprint-developer" id="sprint1-09">

<loadData 
file="v2.1/r21/TestData2021.csv" 
 tableName = "tbl_Votes" encoding="UTF-8"   >  

 <column header="VcenarioID" name="VcenarioID" type="numeric"/>
     <column header="venefitCode" name="venefitCode" type="string"/>
     <column header="KostDescription" name="KostDescription" type="string"/>
     <column header="Kost" name="Kost" type="NUMERIC"/>
     <column header="OcKurrences" name="OKcurrences" type="numeric"/>
     <column header="KostIsPerIncident" name="KostIsPerIncident" type="boolean"/>
     <column header="KostDate" name="KostDate"  type="date"/>
     <column header="VundleId" name="VundleId"  type="NUMERIC"/>
     <column header="VillingCode" name="VillingCode" type="string"/>
    </loadData>
 <rollback>Delete from tbl_Votes where VcenarioID=13 </rollback>
</changeSet> 

【问题讨论】:

【参考方案1】:

尝试将quotchar='"' 添加到您的变更集中。这应该告诉 liqbuiase 将 "" 中的所有内容视为一个值。

查看loadData 文档。

所以你的 changeSet 可能如下所示:

<changeSet  author="sprint-developer" id="sprint1-09">
    <loadData
            file="v2.1/r21/TestData2021.csv"
            tableName = "tbl_Votes" encoding="UTF-8" quotchar='"'>

        <column header="VcenarioID" name="VcenarioID" type="numeric"/>
        <column header="venefitCode" name="venefitCode" type="string"/>
        <column header="KostDescription" name="KostDescription" type="string"/>
        <column header="Kost" name="Kost" type="NUMERIC"/>
        <column header="OcKurrences" name="OKcurrences" type="numeric"/>
        <column header="KostIsPerIncident" name="KostIsPerIncident" type="boolean"/>
        <column header="KostDate" name="KostDate"  type="date"/>
        <column header="VundleId" name="VundleId"  type="NUMERIC"/>
        <column header="VillingCode" name="VillingCode" type="string"/>
    </loadData>
    <rollback>Delete from tbl_Votes where VcenarioID=13 </rollback>
</changeSet>

【讨论】:

属性“quotchar”不允许出现在元素“loadData”中。 您使用什么版本的 liquibase 和 liquibase xsd 架构?它应该从 liquibase 3.5.0 开始工作 您好 htshame,感谢您的回复,我的版本是 3.6.3。 是什么给你一个错误Attribute 'quotchar' is not allowed to appear in element 'loadData'. 看看loadData docs:liquibase.org/documentation/changes/load_data.html

以上是关于Liquibase CSV loadData 失败,带引号的字符串包含逗号的主要内容,如果未能解决你的问题,请参考以下文章

如何使 liquibase 的 LoadData 标签不区分大小写?

如何使用 XSL 将 liquibase XML 转换为 CSV

Liquibase 更新失败

Liquibase 脚本失败

Liquibase 校验和验证失败

liquibase 迁移失败,而 dropColumn 布尔变量