Estoy intentando seleccionar una columna de una tabla única (sin uniones) y necesito el recuento del número de filas, idealmente antes de empezar a recuperar las filas. He llegado a dos enfoques que proporcionan la información que necesito.
Enfoque 1:
SELECT COUNT( my_table.my_col ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
Entonces
SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
O Enfoque 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'
Hago esto porque mi controlador SQL (SQL Native Client 9.0) no me permite usar SQLRowCount en una sentencia SELECT pero necesito saber el número de filas de mi resultado para asignar un array antes de asignarle información. El uso de un contenedor asignado dinámicamente no es, desafortunadamente, una opción en esta área de mi programa.
Me preocupa que pueda ocurrir el siguiente escenario:
¿Prohíbe el Enfoque 2 este problema?
Además, ¿será uno de los dos enfoques más rápido? Si es así, ¿cuál?
Por último, ¿hay un enfoque mejor que debería considerar (tal vez una manera de instruir al controlador para devolver el número de filas en un resultado SELECT utilizando SQLRowCount?)
Para aquellos que preguntaron, estoy usando Native C++ con el controlador SQL antes mencionado (proporcionado por Microsoft.)
He aquí algunas ideas:
Quizá quieras pensar en un patrón mejor para tratar datos de este tipo.
Ningún controlador SQL que se respete a sí mismo le dirá cuántas filas devolverá su consulta antes de devolver las filas, porque la respuesta podría cambiar (a menos que utilice una Transacción, lo que crea problemas propios).
El número de filas no cambiará - busque en Google ACID y SQL.