Bulkcopy вставляет с DBCC CheckIdent - PullRequest
0 голосов
/ 22 апреля 2010

Нашей команде необходимо вставить огромное количество данных в нашу базу данных SQL Server 2008. Мы ищем хорошее решение. Теперь мы придумали один, но я сомневаюсь в этом, просто потому что это не правильно. Поэтому я спрашиваю здесь, кажется ли это хорошим решением. Дополнительным вызовом является то, что это одноранговая реплицируемая база данных на 4 серверах! :)

Представьте, что у нас есть 1 миллион строк для вставки

  1. Начать транзакцию
  2. Увеличить текущее значение идентификатора на столе с 1 миллиона
  3. Подготовьте DataSet / DataTable с 1 миллионом строк и правильными идентификаторами
  4. BulkCopy данных в базу данных
  5. Подтвердить транзакцию

Это хорошее решение, если мы столкнемся с проблемами параллелизма, слишком большими транзакциями и т. Д.

1 Ответ

0 голосов
/ 22 апреля 2010

у вас будут проблемы (насколько я вижу, поэтому могут быть вещи, которые я пропускаю!), Если база данных подключена и пользователи могут вставлять строки в эту таблицу. Увеличение значения идентификатора для новых строк на мета-уровне просто означает, что следующая строка, вставленная системой, будет использовать этот номер, поэтому, если вы увеличите его до 1 миллиона, это означает, что вы зарезервировали эти числа заранее.

Столбцы идентичности «хороши», но имеют побочный эффект, что они не могут быть переданы. Поэтому, если вам нужно перенести данные в другую БД, вы должны понимать, что вам, вероятно, придется корректировать вставленные данные в соответствии с базой данных, в которую вы их вставляете (поскольку это область данных, что означает, что поля идентичности могут конфликтовать со строками, уже находящимися в таблице. ).

Если это однократное дело, оно может сработать. Если вы планируете делать это регулярно, я бы заглянул в систему миграции более высокого уровня, где вы переносите данные в новые значения идентификаторов или используете guid с NEWSEQUENTIALID (), чтобы вы получали правильные проверенные индексы, а также уникальные передаваемые идентификаторы. .

...