我正在从ODBC源将多行检索到listview控件中。对于simple select,它似乎可以很好地处理SQL_SCROLLABLE的语句属性。如何使用联合查询(有两个选择)进行此操作?
最有可能的服务器是MS SQL server(可能是2005年)。代码是Win32 API的C。
这段代码设置(我认为是)一个服务器端游标,它将数据馈送到ODBC驱动程序中,该驱动程序与SQLFetchScroll的位置获取大致对应,后者将为listview提供缓存。(有时使用SQL FETCH或SQL FETCH LAST以及):
sqlsetstmttr(hstmt1Fetch,
可滚动的SQL属性光标,
(SQLPOINTER)可滚动的SQL,
SQL_是_整数);
sqlsetstmttr(hstmt1Fetch,
SQL属性光标敏感度,
(SQLPOINTER)不区分SQL,
SQL_是_整数);
...
retcode=sqlgetstmttr(hstmt1Fetch,
SQL属性行数,
&当前行数,
SQL是集成的,
无效);
...
retcode=SQLFetchScroll(hstmt1Fetch,SQL_FETCH_ABSOLUTE,位置);
(以上是一个SELECT的工作代码片段)。
这是最好的方法吗?考虑到我需要检索最后一行来获得行数并填充结束缓冲区,有没有更好的方法来做呢?(我可以只用向前滚动吗?)
假设上面的是,我如何通过联合查询获得相同的结果?
后期编辑:union查询的问题是它实际上只强制向前滚动,从而中断SQLFetchScroll(hstmt1Fetch,SQL FETCH_ABSOLUTE,Position)。答案是我怀疑:“你不能”。这实际上意味着重新设计数据库,包括一个视图或一个表来代替联合。但如果我漏掉了什么,我就不提这个问题了。
最佳答案
您不能在数据库服务器上定义一个视图来为您执行联合查询,所以从客户机代码来看,它只是一个选择吗?
如果你不能,你能把联合操作作为你选择的一部分吗。
select some_fields from table1
union
select same_fields from table2
并将结果视为单个结果集?