Sql 如何使用带外键的anrom批量插入两个表

Sql 如何使用带外键的anrom批量插入两个表,sql,scala,playframework-2.3,anorm,Sql,Scala,Playframework 2.3,Anorm,我在做这样的批处理操作时遇到了麻烦 val params = Seq(Seq[NamedParameter]("valueA" -> 1, "valueB" -> 2)) BatchSql(SQL( """ INSERT INTO tableA ( valueA ) VALUES ( {valueA} ); INSERT INTO tableB ( tableAId, valueB ) VALUES ( LAST_INSERT_ID(), {valueB})

我在做这样的批处理操作时遇到了麻烦

val params = Seq(Seq[NamedParameter]("valueA" -> 1, "valueB" -> 2))

BatchSql(SQL(
  """
     INSERT INTO tableA ( valueA ) VALUES ( {valueA} );
     INSERT INTO tableB ( tableAId, valueB ) VALUES ( LAST_INSERT_ID(), {valueB});
  """.stripMargin), params).execute()
有这样的桌子

CREATE TABLE tableA
(
  id int AUTO_INCREMENT PRIMARY KEY,
  valueA int
); 

CREATE TABLE tableB
(
  id int AUTO_INCREMENT PRIMARY KEY
  tableAId int,
  valueA int,
  FOREIGN KEY (tableAId) REFERENCES tableA (id),
); 
我得到这个例外,只是抱怨第2行

BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO tableB  ( tableAid, valueA' at line 1]]

谢谢

您需要两个表,第一个表生成主键,第二个表使用新创建的主键作为外键

create table TABLE_1 columns ID_TABLE_1 PK, A, B (UNIC), C;
create table TABLE_2 columns ID_TABLE_1 FK, D, E;

DECLARE @unicValue int = 987;
INSERT INTO TABLE_1 (A,B,C) VALUES ('A', @unicValue, 'C');

INSERT INTO TABLE_2 (ID_TABLE_1, D, E) VALUES (
 (SELECT ID_TABLE_1 FROM TABLE_1 WHERE B = @unicValue), 'VALUE', 'C');
  • 添加多个“批”
  • 执行批处理
由于使用JDBC prepared语句,因此只需要一条SQL语句。因此,SQL字符串中的第二条语句在这种情况下是一个语法错误。批处理更新(使用anrom或直接JDBC)是关于使用相同的单个语句(为批处理中的每个参数列表准备)执行参数列表(批处理参数)。所以我想说,无论您的JDBC驱动程序(底层数据库)是什么,这样的JDBC批量更新都是不可能的。也许这就是存储过程有用的地方。仅供参考,Anorm可以很好地使用存储过程