簡體   English   中英

通過ODBC API從SQL查詢獲得的數據大小

[英]Size of data obtained from SQL query via ODBC API

有人知道我執行SQL查詢后如何獲得返回的元素數(行*列)嗎? 如果不能做到這一點,那么是否有某種可以相對代表我返回的數據大小的東西?

我正在嘗試創建一個狀態欄,該狀態欄指示我已處理了多少返回數據,因此我想位於相對較近的位置。 有任何想法嗎?

請注意,SQLRowCount僅返回返回受UPDATE,INSERT或DELETE語句影響的行數。 不是從SELECT語句返回的行數(據我所知)。 所以我不能直接將其乘以SQLColCount。

我的最后一個選擇是使狀態欄來回顯示,指示正在處理數據。

當您想要保留動態內存以保存整個結果集時,這通常是一個問題。

一種技術是將計數作為結果集的一部分返回。

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'

如果驅動程序支持,SQLRowCount可以返回SELECT查詢的行數。 但是,許多驅動程序卻沒有,因為服務器計算該開銷可能很昂貴。 如果要保證始終有一個計數,則必須使用COUNT(*),從而迫使服務器執行可能耗時的計算(或導致服務器延遲返回任何結果,直到知道整個結果為止)。

我的建議是嘗試使用SQLRowCount,以便服務器或驅動程序可以確定行數是否易於計算。 如果返回值,則將其乘以SQLNumResultCols的結果。 否則,如果返回-1,請使用來回狀態欄。 有時這樣做會更好,因為您可以對用戶做出更好的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM