2012-07-02 2 views
1

Как сделать SQL Server фиксацией вставок в куски? Мне нужно скопировать большое количество строк из старой БД в новую таблицу, и она имеет несколько проблем:SQL insert into - for loop

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

  2. мой файл журнала растет как сумасшедший, и это, вероятно, закончится вне пространства.

  3. Если что-то ломается посередине, я должен повторить все.

Если добавить SET ROWCOUNT 500, я могу ограничить количество строк, но я не знаю, как продолжить с последним добавленным идентификатором. Я могу запросить новую таблицу, чтобы увидеть, что было вставлено последним, но я не уверен, что это правильно. И это немного сложно, потому что мой пункт where не использует столбец ID, поэтому я не знаю, как точно узнать, где продолжить.

Каков наилучший подход для этого? Есть ли «цикл» или что-то, что позволяло бы мне совершать каждый раз в то время?

Я использую SSMS для SQL Server 2008 R2.

+3

Что касается [объемной вставки] (http://msdn.microsoft.com/en-us/library/ms188365 (v = sql.105) .aspx)? – danihp

+0

@ danihp: можно ли это фильтровать? Я хочу сказать, добавить предложение 'where'? Скорее всего, копируются целые таблицы. – Lou

+0

Возможно, это может помочь вам: http://msdn.microsoft.com/en-us/library/ms190422(v=sql.105).aspx. Также вам недостаточно «BATCHSIZE = batch_size» (вместо этого где предложение)? – danihp

ответ

2

Даже если ответ TomTom, саркастический, он содержит два основных варианта, которые могут помочь вам:

  1. Вы можете написать цикл в T-SQL (см, например, while) и использовать TOP и Offset для выберите куски (вам нужен заказ). Вы можете свести к минимуму лунинг в соответствии с Microsoft. И если вы просто беспокоитесь о перезапуске, не переделывая все это должно быть хорошо, хотя я не ожидаю, что это будет быстро.

  2. Вы можете экспортировать ваш выбор в файл и использовать объемную вставку для его загрузки.

еще несколько вариантов, вы можете найти here (About Bulk Import and Bulk Export Operations) и here (INSERT Section Best Practices).

+0

Спасибо, это полезно, хотя в конце концов я написал небольшое консольное приложение для передачи данных в куски в конце. – Lou

-4

Как сделать фиксацию SQL Server в кусках?

Вы программируете код, который вставляет его в куски, довольно просто.

1: Да, так работают транзакции, вы знаете.

2: Да, так работают транзакции.

3: Да, думаю, что - ЭТО КАК РАБОТАТЬ СДЕЛКИ, вы знаете,)

, но я не знаю, как продолжить с последней вставленной ID

Called программирования. Создайте идентификаторы на стороне клиента. Помните последний, который вы создали.

В общем, я бы советовал не вводить код INSERT - в зависимости от того, как работает ваш код, это звучит как операция копирования данных, и для этого есть другие механизмы (объемный интерфейс копирования).

Я использую SSMS для SQL Server 2008 R2

В основном она ведет себя, как вы программируете его. Вы можете легко вставить некоторый цикл на стороне SSMS или экспортировать в файл, а затем вставить вложенный массив. Не поможет вам с пунктом 2, хотя ... если вы не перейдете к простой модели резервного копирования и не заботитесь о восстановлении.

Также 3 является сложным, а затем - как правильно перезапустить? Много дополнительного кода.

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

+1

1000 эндеков вашему сэру, это краткий и полезный ответ. – Lou

+4

Эй, похоже, в последнее время ты немного возбужден. Возможно, вам нужно взять небольшой мини-отпуск. Вы знаете, расслабьтесь и успокойтесь. – Will