sql - 使用 UNION 查询从 ODBC 源中检索多行

标签 sql sql-server c winapi listview

我正在从 ODBC 源中将多行检索到 ListView 控件中。对于简单的 SELECT,它似乎与 SQL_SCROLLABLE 的语句属性配合得很好。我如何使用 UNION 查询(​​有两个选择)执行此操作?

最有可能的服务器是 MS SQL Server(可能是 2005)。 Win32 API 的代码是 C。

此代码设置(我认为是)一个服务器端游标,它将数据馈送到 ODBC 驱动程序,大致对应于 SQLFetchScroll 的位置提取,而后者又为 ListView 馈送缓存。 (有时使用 SQL_FETCH_FIRST 或 SQL_FETCH_LAST 以及):

SQLSetStmtAttr(hstmt1Fetch,
               SQL_ATTR_CURSOR_SCROLLABLE,
               (SQLPOINTER)SQL_SCROLLABLE,
               SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt1Fetch,
               SQL_ATTR_CURSOR_SENSITIVITY,
               (SQLPOINTER)SQL_INSENSITIVE,
               SQL_IS_INTEGER);
...
retcode = SQLGetStmtAttr(hstmt1Fetch,
                         SQL_ATTR_ROW_NUMBER,
                         &CurrentRowNumber,
                         SQL_IS_UINTEGER,
                         NULL);
...
retcode = SQLFetchScroll(hstmt1Fetch, SQL_FETCH_ABSOLUTE, Position);

(以上是单个 SELECT 的工作代码片段)。

这是最好的方法吗?鉴于我需要检索最后一行以获取行数并填充结束缓冲区,是否有更好的方法? (我可以只向前滚动吗?)

假设以上是肯定的,我如何使用 UNION 查询获得相同的结果?

后期编辑: union 查询的问题在于它有效地强制只向前滚动,这会破坏 SQLFetchScroll(hstmt1Fetch, SQL_FETCH_ABSOLUTE, Position)。我怀疑答案是:“你不能”。这实际上意味着重新设计数据库以包含一个 View 或一个表来替换 UNION。但我会留下这个问题以防万一我遗漏了什么。

最佳答案

你能不能在数据库服务器上定义一个为你做 union 查询的 View ,这样从客户端代码来看它就像一个单一的选择?

如果你不能,你能不能把 union 操作作为你选择的一部分,例如

select some_fields from table1
union
select same_fields from table2

并将结果视为单个结果集?

关于sql - 使用 UNION 查询从 ODBC 源中检索多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/99468/

相关文章:

mysql - 如何将sql代码改为mysql

mysql - mssql 和 mysql 区分大小写,例如

c - 将 Fortran/C 程序从 32 位升级到多体系结构

sql - 在单个查询中检索 CURRVAL 和 NEXTVAL

mysql - 多次查询同一个表但在不同的列中mysql

sql - 我们可以将本地 SQL Server 数据库中的表连接到 Azure Delta Lake 中 Delta 表中的表吗?我有什么选择

mysql - 组合 2 个 MySQL 查询以提高性能

SQL Server select where sql_variant equal 不起作用?

c# - 有关如何从头开始构建小型 isapi 服务器的教程? (不是 isapi 过滤器或扩展)

c - C 中数组下标错误的无效类型 'int[int]'?