Я играл с Row-Wise, Column-Wise и привязкой параметров, чтобы найти способ указать на непоследовательный массив буферов для возврата столбца VARCHAR.
Возвращение может иметь 10 символов или 8000. Я не хочу выделять 8000 x nRows байт памяти, очевидно, поэтому я старался найти способ улучшить это.
Первый очевидный способ - выделить буфер длиной 8000 байт, а затем, как только SqlFetchO () вернет длину столбца, выделить правильный размер для возврата и copy over. Поскольку копия стоит дорого, я пытаюсь избежать этого.
Следующая идея, которая у меня появилась, заключалась в том, чтобы выпустить два оператора SELECT. Первый будет:
SELECT DATALENGTH(Description) from SpecialOffer WHERE MinQty > 0
Я не уверен, насколько это дорого, но если предположить, что на самом деле данные не копируются из базы данных, а поле длиной 2 байта просто читается, это может быть быстро? Перед выполнением второго запроса я могу выделить массив, каждый член которого имеет точную длину.
Есть ли способ получить точную информацию о длине столбца VARCHAR перед извлечением строки в SQL Server?
Кроме того, есть ли способ использовать указатель на указатель на буфер (т. Е. Двойная разыменование, требуемая драйвером ODBC). Это позволило бы мне использовать привязку Row-Wise и массив указателей на буферы, например (используя второй метод).