斯卡拉杜比。创建并插入临时文件 Table
Scala Doobie. Creating and Inserting into a Temp Table
我是 Scala 的新手,也是 Doobie 的新手。我正在连接到 SQL Server 2014,需要创建一个临时文件 table,然后插入该临时文件 table。在 SQL 服务器中,当您创建临时文件 table 并断开连接时,临时文件 table 会自动删除。
在下面的代码片段中,我遇到了这个异常:
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name '#temp'
片段:
val create: doobie.ConnectionIO[Int] = sql"CREATE TABLE #temp (tmp CHAR(20))".update.run
val insert: doobie.ConnectionIO[Int] = sql"INSERT INTO #temp values ('abc'), ('def')".update.run
val query: doobie.ConnectionIO[List[String]] = sql"select * from #temp ".query[String].to[List]
def wrapper(): ConnectionIO[List[String]] = {
for {
c <- create
i <- insert
q <- query
} yield q
}
wrapper().transact(xa).debug.as(ExitCode.Success)
我相信这是在告诉我 Doobie 正在删除创建和插入语句之间的连接?
expected/desired 行为是它将 return 一个 List("abc","def")
。
在此先感谢您的帮助!
更新:
这是我所知道的实际工作的一个小例子:
val create = sql"CREATE TABLE #temp (tmp CHAR(20))"
val insert: doobie.ConnectionIO[Int] = sql"INSERT INTO #temp values ('abc'), ('def')"
(create ++ insert).update.run.transact(xa).debug.as(ExitCode.Success)
(请注意,它仅适用于创建和插入部分,不适用于查询部分)
在我的笔记本电脑上用头撞了 1 周之后...我终于弄明白了。 Doobie 在执行 .query
:
时实际上会执行“更新”命令
val create: Fragment = sql"CREATE TABLE #temp (tmp CHAR(20))"
val insert: Fragment = sql"INSERT INTO #temp values ('abc'), ('def')"
val query: Fragment = sql"select * from #temp "
(create ++ insert ++ query).query[String].to[List].transact(xa).debug.as(ExitCode.Success)
输出:
List(abc ,def )
我是 Scala 的新手,也是 Doobie 的新手。我正在连接到 SQL Server 2014,需要创建一个临时文件 table,然后插入该临时文件 table。在 SQL 服务器中,当您创建临时文件 table 并断开连接时,临时文件 table 会自动删除。
在下面的代码片段中,我遇到了这个异常:
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name '#temp'
片段:
val create: doobie.ConnectionIO[Int] = sql"CREATE TABLE #temp (tmp CHAR(20))".update.run
val insert: doobie.ConnectionIO[Int] = sql"INSERT INTO #temp values ('abc'), ('def')".update.run
val query: doobie.ConnectionIO[List[String]] = sql"select * from #temp ".query[String].to[List]
def wrapper(): ConnectionIO[List[String]] = {
for {
c <- create
i <- insert
q <- query
} yield q
}
wrapper().transact(xa).debug.as(ExitCode.Success)
我相信这是在告诉我 Doobie 正在删除创建和插入语句之间的连接?
expected/desired 行为是它将 return 一个 List("abc","def")
。
在此先感谢您的帮助!
更新:
这是我所知道的实际工作的一个小例子:
val create = sql"CREATE TABLE #temp (tmp CHAR(20))"
val insert: doobie.ConnectionIO[Int] = sql"INSERT INTO #temp values ('abc'), ('def')"
(create ++ insert).update.run.transact(xa).debug.as(ExitCode.Success)
(请注意,它仅适用于创建和插入部分,不适用于查询部分)
在我的笔记本电脑上用头撞了 1 周之后...我终于弄明白了。 Doobie 在执行 .query
:
val create: Fragment = sql"CREATE TABLE #temp (tmp CHAR(20))"
val insert: Fragment = sql"INSERT INTO #temp values ('abc'), ('def')"
val query: Fragment = sql"select * from #temp "
(create ++ insert ++ query).query[String].to[List].transact(xa).debug.as(ExitCode.Success)
输出:
List(abc ,def )