Мне нужно скопировать большой набор результатов из одной базы данных и сохранить его в другой базе данных.
Хранимые процедуры используются как для извлечения, так и для сохранения, поскольку во время сохранения присутствует некоторая логика.
Я пытаюсь найти эффективное решение, никоим образом не могу удержать весь набор данных в памяти, и я бы хотел минимизировать количество циклов обработки.
Данные читаются из исходной таблицы с помощью
var reader = fetchCommand.ExecuteReader();
while (reader.Read()){...}
Есть ли способ вставить эти данные в другой sqlCommand без загрузки всего набора данных в DataTable
, но также без вставки строк по одному?
Sqlserver - это MS SQL Server 2008 для обоих источникови целевые базы данных.Базы данных находятся на разных серверах.Использование служб SSIS или связанных серверов недопустимо.
РЕДАКТИРОВАТЬ: По-видимому, можно выполнить потоковую передачу строк в хранимую процедуру с использованием табличных параметров .Также рассмотрим этот подход.
ОБНОВЛЕНИЕ: Да, есть возможность потоковой передачи данных из command.ExecuteReader
в другую команду, подобную этой:
var reader = selectCommand.ExecuteReader();
insertCommand.Parameters.Add(
new SqlParameter("@data", reader)
{SqlDbType = SqlDbType.Structured}
);
insertCommand.ExecuteNonQuery();
Где insertCommand
является хранимой процедурой с табличным параметром @data
.