К сожалению, BCPing в таблицу - это все или ничего, вы не можете выбрать строки для ввода.
Что бы я сделал, это. , .
- Создать таблицу на источнике
база данных, это будет хранить идентификаторы
из строк вам нужно двигаться. Вы
Теперь можно BCP из строк, которые вы
необходимо.
- В базе данных назначения создайте
новая таблица Work In Progress, и
ППГ строк там.
- Оказавшись там, вы можете написать скрипт
что решит, стоит ли
Строка WIP идет в пункт назначения
стол или нет.
Надеюсь, это поможет.
Обновление
Под таблицами незавершенного производства (WIP) я не имею в виду таблицы #temp, вы не можете включить BCP во временную таблицу (по крайней мере, я был бы очень взволнован, если бы вы могли).
Я имею в виду таблицу, которую вы создадите с той же структурой таблицы назначения, в которую вставьте bcp, запишите строки WIP в таблицу назначения и затем удалите таблицу WIP.
Вы не сказали, какую СУБД вы используете, предполагая SQL Server, что-то вроде следующего (непроверенный код). , .
-- following creates new table with identical schema to destination table
select * into WIP_Destination from Destination
where 1 = 0
-- BCP in the rows
BULK INSERT WIP_Destination from 'BcpFileName.dat'
-- Insert new rows into Destination
insert into Destination
Select * from WIP_Destination
where not id in (select id from Destination)
-- Update existing rows in destination
Update Destination
set field1 = w.field1,
field2 = w.field2,
field3 = w.field3,
. . .
from Destination d inner join WIP_Destination w on d.id = w.id
Drop table WIP_Destination
Обновление 2
Итак, вы можете вставить во временные таблицы, я только что попробовал (у меня не было времени на днях, извините).
По проблеме основных / подробных записей (и мы сейчас отходим от темы исходного вопроса, если бы я был вами, я бы открыл новый вопрос для этой темы, вы получите больше ответов, чем просто мой)
Вы можете написать SP, который будет проходить через новые строки для добавления.
Итак, вы перебираете строки в вашей временной таблице (эти строки имеют исходный идентификатор из исходной базы данных), вставляете эту строку в таблицу назначения, используйте SCOPE_IDENTITY , чтобы получить идентификатор недавно вставленный ряд. Теперь у вас есть старый идентификатор и новый идентификатор, вы можете создать оператор вставки, который будет вставлять оператор для строк подробностей, например. , .
insert into Destination_Detail
select @newId, field1, field2 . . . from #temp_Destination_Detail
where Id = @oldId
Надеюсь, что это поможет [если это помогло, вам разрешено проголосовать за этот ответ, даже если это не тот ответ, который вы выберете:)]
Спасибо
BW