【问题标题】:Size of data obtained from SQL query via ODBC API通过 ODBC API 从 SQL 查询获得的数据大小
【发布时间】:2010-09-25 22:52:10
【问题描述】:

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

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

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

我的最后一个选择是设置一个来回显示数据的状态栏。

【问题讨论】:

    标签: c++ sql api odbc


    【解决方案1】:

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

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

    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'
    

    【讨论】:

    • 回想起来,我忽略了指出 USER_TAB_COLS 可能是 Oracle 特定的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 2017-03-26
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多