Slick:Insert 从 Raw SQL Select 变成 Table
Slick:Insert into a Table from Raw SQL Select
从 Raw SQL Select
插入 Table
val rawSql: DBIO[Vector[(String, String)]] = sql"SELECT id, name FROM SomeTable".as[(String, String)]
val myTable :TableQuery[MyClass] // with columns id (String), name(String) and some other columns
有没有办法使用 forceInsert
函数将 select 中的数据插入表中?
如果没有,有没有办法使用 forceInsertStatements
生成 sql 字符串?
类似于:
db.run {
myTable.map{ t => (t.id, t.name)}.forceInsert????(rawSql)
}
P.S。我不想进行两次 I/O 调用,因为我的 RAW SQL 可能会返回数千条记录。
感谢您的帮助。
如果您可以将 rawSql
查询表示为 Slick 查询...
val query = someTable.map(row => (row.id, row.name))
...例如,forceInsertQuery
将满足您的需求。一个例子可能是:
val action =
myTable.map(row => (row.someId, row.someName))
.forceInsertQuery(
someTable.map(query)
)
但是,我认为您使用原始 SQL 是有充分理由的。在那种情况下,我不相信你可以使用 forceInsert(没有 round-trip 到数据库)因为原始 SQL 已经是一个动作(不是查询)。
但是,既然您使用的是原始 SQL,为什么不全部使用原始 SQL?类似于:
val rawEverything =
sqlu" insert into mytable (someId, someName) select id, name from sometable "
...或类似的。
从 Raw SQL Select
插入 Tableval rawSql: DBIO[Vector[(String, String)]] = sql"SELECT id, name FROM SomeTable".as[(String, String)]
val myTable :TableQuery[MyClass] // with columns id (String), name(String) and some other columns
有没有办法使用 forceInsert
函数将 select 中的数据插入表中?
如果没有,有没有办法使用 forceInsertStatements
生成 sql 字符串?
类似于:
db.run {
myTable.map{ t => (t.id, t.name)}.forceInsert????(rawSql)
}
P.S。我不想进行两次 I/O 调用,因为我的 RAW SQL 可能会返回数千条记录。 感谢您的帮助。
如果您可以将 rawSql
查询表示为 Slick 查询...
val query = someTable.map(row => (row.id, row.name))
...例如,forceInsertQuery
将满足您的需求。一个例子可能是:
val action =
myTable.map(row => (row.someId, row.someName))
.forceInsertQuery(
someTable.map(query)
)
但是,我认为您使用原始 SQL 是有充分理由的。在那种情况下,我不相信你可以使用 forceInsert(没有 round-trip 到数据库)因为原始 SQL 已经是一个动作(不是查询)。
但是,既然您使用的是原始 SQL,为什么不全部使用原始 SQL?类似于:
val rawEverything =
sqlu" insert into mytable (someId, someName) select id, name from sometable "
...或类似的。