Я хочу отправить большие объемы данных из приложения .Net на SQL Server. Эти записи данных поступают из файла CSV и должны быть перенаправлены через хранимую процедуру на стороне SQL Server. Я знаю о SqlBulkCopy, но SqlBulklCopy записывается непосредственно в таблицы. Значит, он мне не подходит. Я говорю от более 100.000.000 записей. Я не смогу хранить этот объем данных в памяти. Поэтому в идеале я спрашиваю, существует ли какая-то потоковая передача данных из .Net в хранимую процедуру. Я благодарен за любую помощь.
Я думаю, вы ищете Табличные параметры . Существует достаточно документации, как создать тип TVP в базе данных и использовать его в хранимой процедуре. При настройке SqlParameter
вы можете предоставить IEnumerable<SqlDataRecord>
который может быть легко предоставлен с помощью функции итератора C #, непосредственно просматривая последовательно записи данных файла CSV один за другим и для каждой записи, анализируя, конвертируя и SqlDataRecord
соответствующий SqlDataRecord
. На стороне сервера Sql данные по-прежнему будут вставлены в объемный файл tempdb перед передачей хранимой процедуре, но по крайней мере на стороне клиента вам не нужна память для хранения всех этих данных.