2010-11-03 2 views
3

У меня возникла ситуация, когда мне нужно скопировать несколько таблиц из одной базы данных SQL Server в отдельную базу данных SQL Server. Базы данных находятся в одном экземпляре. Таблицы, которые я копирую, содержат минимум 4,5 миллиона строк и имеют размер около 40 ГБ.Может ли BCP копировать данные непосредственно из таблицы в таблицу?

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

Возможно ли это? Если да, то как?

EDIT: Причина, по которой мы не используем простой INSERT, состоит в том, что у нас ограниченное пространство на диске регистрации на сервере, которое почти мгновенно исчезает при попытке ввода INSERT. Мы попробовали это, но запрос быстро замедлился до скорости улитки, когда накопитель журнала заполнился.

+1

Если это две базы данных в одном экземпляре, почему бы не использовать 'INSERT'? –

+0

Несколько причин, включая скорость работы и объем пространства, который мы имеем на диске регистрации. INSERT быстро набухает в файлах журнала, и на диске журнала не хватает места. – GShenanigan

+1

Я обычно делаю такого рода 'INSERT' в партиях, скажем, 10 000 строк. –

ответ

2

BCP предназначен для сброса/чтения из файла. Используйте DTS/SSIS для копирования из одной базы данных в другую.

Вот BCP docs в MSDN

+0

Я искал, может ли он быть использован для копирования напрямую или нет, из этого, это нет. К счастью, мне удалось переместить некоторые файлы и освободить достаточно места, чтобы использовать BCP для перемещения данных. Благодарю. – GShenanigan

6

из моего ответа на Table-level backup

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

на экспорт:

bcp "select * from [MyDatabase].dbo.Customer " queryout "Customer.bcp" -N -S localhost -T -E 

импорта:

bcp [MyDatabase].dbo.Customer in "Customer.bcp" -N -S localhost -T -E -b 10000 

Как вы можете видеть, вы можете экспортировать на основе любого запроса, поэтому вы можете даже делать инкрементные резервные копии с этим.

+1

Есть ли способ для BCP из одной таблицы непосредственно в другую, или вам нужно написать файл данных, а затем прочитать из файла данных? – sooprise

2

Мастер импорта/экспорта SQL выполнит эту задачу ... просто дважды подключитесь к той же базе данных (источник и пункт назначения) и скопируйте одну таблицу на другую (пустую и проиндексированную), вам может потребоваться игнорировать поле автонумерного идентификационного ключа если существует. Этот подход работает для меня со столами над записями 1M +.