1つのテーブル(結合なし)からカラムを選択しようとしているのですが、理想的には行の取得を開始する前に行数のカウントが必要です。 必要な情報を提供する2つの方法を見つけました。
アプローチ 1:
SELECT COUNT( my_table.my_col ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
次に
SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
または アプローチ2 を実行します。
SELECT my_table.my_col, ( SELECT COUNT ( my_table.my_col )
FROM my_table
WHERE my_table.foo = 'bar' ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
私がこのようにしているのは、私のSQLドライバ(SQL Native Client 9.0)ではSELECT文でSQLRowCountを使用することができないからですが、情報を割り当てる前に配列を割り当てるために、結果の行数を知る必要があります。 しかし、情報を割り当てる前に配列を割り当てるためには、結果の行数を知る必要があります。動的に割り当てられたコンテナを使用することは、残念ながら私のプログラムのこの領域ではできません。
次のようなシナリオが発生するのではないかと心配しています。
最悪の場合、配列の限界を超えてデータを書き込もうとし、プログラムがクラッシュします。
また、2つのアプローチのうち、どちらかが速くなりますか? もしそうなら、どちらでしょうか?
最後に、検討すべきより良いアプローチはありますか(おそらく、SQLRowCountを使ってSELECT結果の行数を返すようにドライバに指示する方法でしょうか?)。
お尋ねの件ですが、私はNative C++を使用しており、前述のSQLドライバ(Microsoftが提供しています)を使用しています。
いくつかのアイデアがあります。