Tek bir tablodan (birleştirme olmadan) bir sütun seçmeye çalışıyorum ve ideal olarak satırları almaya başlamadan önce satır sayısının sayısına ihtiyacım var. İhtiyacım olan bilgiyi sağlayan iki yaklaşım buldum.
Yaklaşım 1:
SELECT COUNT( my_table.my_col ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
O zaman
SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
Veya Yaklaşım 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'
Bunu yapıyorum çünkü SQL sürücüm (SQL Native Client 9.0) bir SELECT deyiminde SQLRowCount kullanmama izin vermiyor ancak bilgi atamadan önce bir dizi tahsis etmek için sonucumdaki satır sayısını bilmem gerekiyor. Dinamik olarak tahsis edilmiş bir kapsayıcı kullanmak ne yazık ki programımın bu alanında bir seçenek değil.
Aşağıdaki senaryonun gerçekleşebileceğinden endişe ediyorum:
Yaklaşım 2 bu konuyu yasaklıyor mu?
Ayrıca, iki yaklaşımdan biri daha hızlı olacak mı? Eğer öyleyse, hangisi?
Son olarak, göz önünde bulundurmam gereken daha iyi bir yaklaşım var mı (belki de sürücüye SQLRowCount kullanarak SELECT sonucundaki satır sayısını döndürmesi talimatını vermenin bir yolu?)
Soranlar için, yukarıda bahsedilen SQL sürücüsü (Microsoft tarafından sağlanan) ile Native C++ kullanıyorum.
İşte bazı fikirler:
Bu tür verilerle başa çıkmak için daha iyi bir model düşünmek isteyebilirsiniz.
Kendine saygısı olan hiçbir SQL sürücüsü, satırları döndürmeden önce sorgunuzun kaç satır döndüreceğini size söylemez, çünkü yanıt değişebilir (bir Transaction kullanmadığınız sürece, bu da kendi başına sorunlar yaratır).
Satır sayısı değişmeyecektir - ACID ve SQL için google'a bakın.