Estoy tratando de seleccionar una columna de una sola tabla (sin uniones) y necesito contar el número de filas, idealmente antes de comenzar a recuperar las filas. He llegado a dos enfoques que proporcionan la información que necesito.Necesita un recuento de filas después de la instrucción SELECT: ¿cuál es el enfoque SQL óptimo?
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'
que estoy haciendo esto porque mi controlador de SQL (SQL Native Client 9.0) no me permite use SQLRowCount en una instrucción SELECT, pero necesito saber el número de filas en mi resultado para asignar una matriz antes de asignarle información. El uso de un contenedor dinámicamente asignado, desafortunadamente, no es una opción en esta área de mi programa.
Me preocupa que pueda ocurrir el siguiente escenario:
- SELECT para el recuento se produce
- ocurre Otra instrucción, adición o eliminación de una fila
- SELECT produce datos y de repente la matriz es el mal tamaño.
-En el peor de los casos, esto intentará escribir datos más allá de los límites de las matrices y bloquear mi programa.
¿El enfoque 2 prohíbe este problema?
Además, ¿Será uno de los dos enfoques más rápidos? Si es así, ¿cuál?
Por último, ¿hay un mejor enfoque que debería tener en cuenta (tal vez una manera de indicar al conductor para devolver el número de filas en un resultado de SELECT usando SQLRowCount?)
Para aquellos que pidió, estoy usando nativo C++ con el controlador SQL antes mencionado (provisto por Microsoft.)
¿Qué estás haciendo con estos datos que necesitas tanto los datos sin procesar como el recuento de filas? Si necesita todos los datos brutos (que es lo que está seleccionando), ¿no puede contarlos mientras los lee? Si no necesita todos los datos brutos, no los seleccione. ¿El recuento es solo para fines de paginación? –