0

我正在寻找一种方法让HDBC在单个语句中支持多个结果集

testMultipleResultsetSingleStatement = do
  let sql = "select 1,2,3 union all select 2,3,4 select 'a', 'b'"
  c <- connectODBC connectionString
  rs <- quickQuery c sql []
  return rs

这只会返回[[SqlInt32 1,SqlInt32 2,SqlInt32 3],[SqlInt32 2,SqlInt32 3,SqlInt32 4]]

我们在这里看到第二个结果集的结果被丢弃了

我想知道是否有除 quickQuery 之外的其他功能可以支持此功能?

理想情况下,返回类型应该是[[[SqlValue]]]而不是[[SqlValue]]这样,第一个最外层列表将对应于查询返回的每个结果集。

如果HDBC没有为它提供方法,还有什么其他包可以处理返回多个结果集的语句?

编辑:实际上,无需更改 API 的解决方案就是让它以这种方式工作:

testMultipleResultsetSingleStatement = do
  let
    sql = "select 1,2,3 union all select 2,3,4 select 'a', 'b'"
  c <- connectODBC connectionString
  statement <- prepare c sql
  _ <- execute statement []
  rows1 <- fetchAllRows statement
  rows2 <- fetchAllRows statement
  return (rows1, rows2)

我检查了,在 sqlserver 的情况下,它确实返回了 rows2 的空列表

4

1 回答 1

1

不,目前 hdbc 不支持它。

虽然我认为这种功能没有任何目的。

怎么会比

let sql1 = "select 1,2,3 union all select 2,3,4"
    sql2 = " select 'a', 'b'"

c <- connectODBC connectionString

rs1 <- quickQuery c sql1 []
rs2 <- quickQuery c sql2 []

return (rs1,rs2)

或者,如果您真的坚持在一个列表中拥有不同数量的文件和字段类型的 dirrerent 记录(嗯,很奇怪,但没关系),您可以这样做:

return $ rs1 ++ rs2
于 2013-10-15T19:37:33.170 回答