Matrimony Ответов: 1

Выполнение инструкции пакетной вставки в SQL SERVER


В моем приложении он будет динамически генерировать 20 000 строк инструкции insert, отправлять ее на sql server и запускать.
Когда эти инструкции insert выполняются, возникает ошибка
There is insufficient system memory in resource poll 'default' to run this query.


существует ли эффективный способ выполнения этих инструкций insert?

Что я уже пробовал:

is there an efficient way to run these insert statements?

20,000 rows of insert statement
подобный этому :
вставить в таблицу 1(....) значения(...)
вставить в таблицу 2(....) значения(...)
.
.
.
вставить в таблицу 20000 (....) значений(...)

1 Ответов

Рейтинг:
1

Mycroft Holmes

Я использую промежуточную стратегию, когда я массово копирую данные в SQL Server, если у меня есть такой том. Это влечет за собой:

Создайте промежуточную таблицу с полями, соответствующими именам столбцов исходных данных
Все поля в промежуточной таблице должны быть varchar
Считывание исходных данных
Получение пустого набора записей из базы данных для промежуточной таблицы
вставьте исходные данные в пустую таблицу данных
Массовое копирование DataTable в sql server

private int BulkCopy(DataTable dtTable, string sTableName, SqlConnection oConn)
		{
			try
			{
				SqlBulkCopy oBC = new SqlBulkCopy(oConn);
				oBC.BulkCopyTimeout = 60000;
				oBC.DestinationTableName = sTableName;
				oBC.WriteToServer(dtTable);
				return dtTable.Rows.Count;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}


Затем используйте хранимую процедуру для преобразования промежуточных данных в конечную таблицу.


Matrimony

это не будит меня

CHill60

"не работает" -это не помогает. С какими явными проблемами вы столкнулись?

Mycroft Holmes

Решение слишком сложное, кодез недостаточно явный - что вы ожидаете от него думать!!!

CHill60

Лол!

Matrimony

то,что у меня есть, - это пакет инструкций insert, у меня нет datatable в качестве примера.

Mycroft Holmes

И ваша партия инструкций insert не работает своевременно! Поэтому я предложил решение, которое, как я знаю, работает, поскольку мы регулярно используем его для вставки многих 100 тысяч строк в один вызов базы данных.