我正在使用Liquibase更新某些表,并且似乎遇到一个错误,即只要我的.yaml
文件中包含;
,它就会引发错误(仅放入部分错误中)因为它只会重复相同的错误消息):
严重时间1/11/11 11:39:liquibase:_master.xml:表/团队/Team.updateTeamNames.yaml::1::mayj4:Ch ange Set Tables / Team / Team.updateTeamNames.yaml :: 1 :: mayj4失败。错误:您的S错误 QL语法;查看与您的MySQL服务器版本相对应的手册以获取适合我们的正确语法 e在'UPDATE Team SET Name ='B'WHERE Name ='Y'附近;第1行的UPDATE Team SET Name ='C'WHERE Name' [失败的SQL:UPDATE团队SET名称='A',名称='X';更新团队SET名称=“ B”,名称=“ Y”; 更新团队SET名称='C',名称='Z'] liquibase.exception.DatabaseException:您的SQL语法有错误;检查手册 或与您的MySQL服务器版本相对应,以在'UPDATE Team SET Name ='B'附近使用正确的语法 WHERE Name ='Y';第1行的UPDATE Team SET名称='C'WHERE Name'[失败的SQL:UPDATE Team SET名称 ='A'WHERE Name ='X';更新团队SET名称=“ B”,名称=“ Y”;更新团队SET名称='C'在N ame ='Z']
这也是我正在使用的命令:
liquibase --driver = com.mysql.cj.jdbc.Driver --classpath = C:\ mysql-connector-java-8.0.13 --logLevel = severe --changeLogFile = _master.xml --url =“ jdbc:mysql:// localhost:3306 / resource?useSSL = false&allowPublicKeyRetrieval = true“ --username = root --password = badpassword123更新
这是.yaml
文件,其中包含完整的SQL。
---
databaseChangeLog:
- changeSet:
author: mayj4
id: 1
changes:
- sql:
sql:
UPDATE Team SET Name = 'A' WHERE Name = 'X';
UPDATE Team SET Name ='B' WHERE Name ='Y';
UPDATE Team SET Name ='C' WHERE Name ='Z';
我正在使用什么
我尝试将splitStatements: true
添加到.yaml
上,但这与the Liquibase documentation所建议的一样。
更新1 似乎即使删除分号仍会失败,这与运行多个查询有关。
答案 0 :(得分:0)
也许是这样的:
- UPDATE Team SET Name = 'Maria' WHERE Name = 'Samurai';
- UPDATE Team SET Name ='Ray' WHERE Name ='Knights';
- UPDATE Team SET Name ='Stephen' WHERE Name ='Vikings';
或
- sql:
sql:
sql1
- sql:
sql:
sql2
以此类推。
破折号-
表示该条目是序列的一部分,并且由于您要执行SQL序列,这应该会有所帮助。 (您可以尝试使用一些变奏者,但是使用-
语法是可行的。)
就个人而言,您的语法看起来很奇怪(为什么我应该将sql嵌套在sql中),但是我不是专家,因为我还没有在yml配置中使用Liquidbase。
答案 1 :(得分:0)
您可以尝试使用“ > ”将多个sql语句合并为一个可执行语句。
auto myVector = std::make_unique<std::vector<int>>(myInts, myInts + (sizeof(myInts)/sizeof(*myInts)));