Може ли BCP да копира данни директно от таблица в таблица?

Имам ситуация, в която трябва да копирам няколко таблици от една SQL Server DB в отделна SQL Server DB. И двете бази данни са на едно и също копие. Таблиците, които копирам, съдържат минимум 4,5 милиона реда и са с размер от около 40 GB нагоре.

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

Възможно ли е това? Ако е така, как?

РЕДАКТИРАНЕ: Причината, поради която не използваме директен INSERT, е, че имаме ограничено място в лог устройството на сървъра, което изчезва почти моментално при опит за INSERT. Опитахме го, но заявката бързо се забави до темпото на охлюв, когато регистрационният диск се напълни.


person GShenanigan    schedule 03.11.2010    source източник
comment
Ако това са две бази данни в едно и също копие, защо не използвате INSERT?   -  person Tim Robinson    schedule 03.11.2010
comment
Няколко причини, включително скоростта на работа и количеството пространство, което имаме на регистрационното устройство. INSERT набъбва регистрационните файлове супер бързо и ни свършва място на лог устройството.   -  person GShenanigan    schedule 03.11.2010
comment
Обикновено правя този вид INSERT в партиди от, да речем, 10 000 реда.   -  person Tim Robinson    schedule 03.11.2010
comment
Каква е скоростта на операцията INSERT обикновено в сравнение с BCP излизане във файл и след това импортиране? Така че по същество изпълнявате INSERT поне 45 пъти (предвид нашите 4,5 милиона + брой редове), като всеки път свивате регистрационните файлове след завършване?   -  person GShenanigan    schedule 03.11.2010
comment
BCP вмъква данни в партиди по същия начин, както бихте направили с INSERT, и има същия вид съображения за регистър на транслацията. Разликата е, че BCP трябва физически да копира данни от сървъра на базата данни и да ги включва отново, докато с INSERT премествате данни в сървъра.   -  person Tim Robinson    schedule 03.11.2010


Отговори (3)


BCP е за дъмпинг към / четене от файл. Използвайте DTS/SSIS за копиране от една DB в друга.

Ето BCP документите в MSDN

person rickythefox    schedule 03.11.2010
comment
Търсех да разбера дали може да се използва за директно копиране или не, от това, това е не. За щастие успях да преместя някои файлове и да освободя достатъчно място, за да използвам BCP за преместване на данните. Благодаря. - person GShenanigan; 11.11.2010

от моя отговор на Архивиране на ниво таблица

Използвам 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

както можете да видите, можете да експортирате въз основа на всяка заявка, така че можете дори да правите инкрементални архиви с това.

person kenwarner    schedule 05.01.2013
comment
Има ли начин за BCP от една таблица директно в друга или трябва да напишете файл с данни, след което да прочетете от файл с данни? - person sooprise; 11.04.2014

Помощникът за импортиране/експортиране на SQL ще свърши работата ... просто се свържете два пъти към една и съща база данни (източник и местоназначение) и копирайте една таблица върху друга (празна и индексирана), може да искате да инструктирате да игнорирате полето за ключ за автоцифров идентификатор, ако съществува. Този подход работи за мен с таблици над 1M+ записи.

person Gonzalo    schedule 19.09.2015