>我正在寻找一种让 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]]
我们在这里看到第二个结果集的结果被丢弃
我想知道除了快速查询之外是否有其他功能可以支持此功能?
理想情况下,返回类型将是 [[[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 的情况下,它确实返回了一个空的行列表2
不,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