Я пытаюсь выбрать столбец из одной таблицы (нет объединений), и мне нужно подсчитать количество строк, в идеале, прежде чем я начну извлекать строки. Я пришел к двум подходам, которые предоставляют необходимую мне информацию.
Подход 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) не позволяет мне использовать SQLRowCount в инструкции SELECT, но мне нужно знать количество строк в моем результате, чтобы выделить массив перед назначением информации Это. Использование динамически выделенного контейнера, к сожалению, не является вариантом в этой области моей программы.
Я обеспокоен тем, что может произойти следующий сценарий:
- SELECT для подсчета происходит
- Выполняется другая инструкция, добавление или удаление строки
- SELECT для данных происходит, и внезапно массив неправильного размера.
В худшем случае это будет пытаться записывать данные за пределы массивов и разбивать мою программу.
Подходит ли подход 2 к проблеме?
Кроме того, будет ли один из двух подходов быстрее? Если да, то что?
Наконец, есть ли лучший подход, который я должен рассмотреть (возможно, способ дать указание драйверу вернуть количество строк в результате SELECT с помощью SQLRowCount?)
Для тех, кто задал вопрос, я использую Native С++ с вышеупомянутым драйвером SQL (предоставляется Microsoft.)