Saya mencoba untuk memilih kolom dari tabel tunggal (tidak ada join) dan saya membutuhkan jumlah baris, idealnya sebelum saya mulai mengambil baris. Saya telah menemukan dua pendekatan yang memberikan informasi yang saya butuhkan.
Pendekatan 1:
SELECT COUNT( my_table.my_col ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
Kemudian
SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
Atau Pendekatan 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'
Saya melakukan ini karena driver SQL saya (SQL Native Client 9.0) tidak mengizinkan saya menggunakan SQLRowCount pada pernyataan SELECT tetapi saya perlu mengetahui jumlah baris dalam hasil saya untuk mengalokasikan larik sebelum menetapkan informasi ke dalamnya. Penggunaan container yang dialokasikan secara dinamis, sayangnya, bukan merupakan pilihan di area program saya ini.
Saya khawatir bahwa skenario berikut ini mungkin terjadi:
Apakah Pendekatan 2 melarang masalah ini?
Juga, Apakah salah satu dari kedua pendekatan tersebut akan lebih cepat? Jika demikian, yang mana?
Akhirnya, apakah ada pendekatan yang lebih baik yang harus saya pertimbangkan (mungkin cara untuk menginstruksikan driver untuk mengembalikan jumlah baris dalam hasil SELECT menggunakan SQLRowCount?)
Bagi mereka yang bertanya, saya menggunakan Native C++ dengan driver SQL yang disebutkan di atas (disediakan oleh Microsoft.)
Berikut ini beberapa gagasan:
Anda mungkin ingin memikirkan pola yang lebih baik untuk menangani data jenis ini.
Tidak ada driver SQL yang menghargai diri sendiri yang akan memberi tahu Anda berapa banyak baris yang akan dikembalikan oleh kueri Anda sebelum mengembalikan baris, karena jawabannya mungkin berubah (kecuali jika Anda menggunakan Transaksi, yang menciptakan masalah tersendiri.).
Jumlah baris tidak akan berubah - google untuk ACID dan SQL.