通过ODBC API从SQL查询获得的数据大小

时间:2008-12-08 22:13:38

标签: c++ sql api odbc

有人知道我在执行SQL查询后如何获取返回的元素数(行* cols)吗?如果无法做到,那么有什么东西可以代表我回来的数据大小吗?

我正在尝试创建一个状态栏,指示我已经处理了多少返回的数据,所以我希望在某个地方相对接近。有什么想法吗?

请注意,SQLRowCount仅返回返回受UPDATE,INSERT或DELETE语句影响的行数;不是从SELECT语句返回的行数(据我所知)。所以我不能将它直接乘以SQLColCount。

我的最后一个选择是有一个来回的状态栏,表示正在处理数据。

2 个答案:

答案 0 :(得分:2)

当您想要保留动态内存来保存整个结果集时,这通常是一个问题。

一种技巧是将计数作为结果集的一部分返回。

WITH
data AS
(
    SELECT interesting-data
    FROM   interesting-table
    WHERE  some-condition
)
SELECT COUNT(*), data.*
from data

如果您事先不知道您选择的是哪些列 或使用*,如上例所示, 然后可以从USER_TAB_COLS表中选择列数

SELECT COUNT(*)
FROM USER_TAB_COLS
WHERE TABLE_NAME = 'interesting-table'

答案 1 :(得分:0)

如果驱动程序支持SELECT查询,SQLRowCount可以返回SELECT查询的行数。然而,许多驱动程序不会,因为服务器计算它可能会很昂贵。如果要保证始终有计数,则必须使用COUNT(*),从而迫使服务器进行可能耗时的计算(或使其延迟返回任何结果,直到知道整个结果)。

我的建议是尝试SQLRowCount,以便服务器或驱动程序可以决定行数是否易于计算。如果它返回一个值,则乘以SQLNumResultCols的结果。否则,如果返回-1,请使用来回状态栏。有时候这样做会更好,因为您可以对用户更敏感。