У меня есть две базы данных на моем SQL Server, каждая из которых содержит одну отдельную таблицу.
У меня есть 2 базы данных, как показано ниже:
1) Db1 (MySQL)
2) Db2 (Oracle)
Теперь я хочу заполнить таблицу базы данных SQL Server db1 данными из Db1 из MySQL, как показано ниже:
Insert into Table1 select * from Table1
Выберите * из таблицы1 (Mysql Db1) - данные, поступающие из базы данных Mysql
Вставить в таблицу 1 (сервер Sql Db1) - вставить данные, поступающие от Mysql с учетом той же схемы
Я не хочу использовать sqlbulk-копию, поскольку я не хочу вставлять кусок по данным куска. Я хочу вставить все данные в один проход, рассматривая миллионы данных, так как моя операция не ограничивается вставкой записей в базу данных. Таким образом, пользователь должен сидеть ждать долгое, как первые миллионы данных, вставляя кусок с помощью chunk в базе данных, а затем снова для моей дальнейшей операции, которая также долго работает.
Итак, если у меня ускоряется этот процесс, то у меня может быть и вторая операция, которая ускорит рассмотрение всех записей в моем 1 локальном экземпляре sql-сервера.
Можно ли это сделать в приложении С#?
Обновление: Я исследовал связанный сервер как @GorDon Linoff предложил мне, что связанный сервер может использоваться для достижения этого сценария, но на основе моих исследований кажется, что я не могу создать связанный сервер с помощью кода.
Я хочу сделать это с помощью ado.net.
Это то, что я пытаюсь сделать точно:
У меня есть две разные клиентские РСУБД с 2 базами данных и некоторыми таблицами в клиентских помещениях.
Итак, база данных такова:
Sql Server :
Db1
Order
Id Amount
1 100
2 200
3 300
4 400
Mysql or Oracle :
Db1:
Order
Id Amount
1 1000
2 2000
3 3000
4 400
Теперь я хочу сравнить столбцы Amount от источника (SQL Server) до базы данных назначения (MySQL или Oracle).
Я буду использовать, чтобы присоединиться к этим двум различным таблицам баз данных СУБД, чтобы сравнить столбцы Amount.
В С# то, что я могу сделать, это как выборка chunk записями chunk в моем datatable (в памяти), тогда сравните эти записи с помощью кода, но это займет много времени, учитывая миллионы записей.
Итак, я хочу сделать что-то лучше этого.
Следовательно, я думал, что я выведу из этих двух записей RDBMS в своем локальном экземпляре SQL Server в 2 базах данных, а затем создаю запрос присоединения, соединяющий эти 2 таблицы на основе Id, а затем воспользуюсь возможностями обработки СУБД, которые могут сравнивать эти миллионы эффективно записывает.
Подобный запрос сравнивает миллионы записей:
select SqlServer.Id,Mysql.Id,SqlServer.Amount,Mysql.Amount from SqlServerDb.dbo.Order as SqlServer
Left join MysqlDb.dbo.Order as Mysql on SqlServer.Id=Mysql.Id
where SqlServer.Amount != Mysql.Amount
Выше запрос работает, когда у меня есть это 2 разных RDBMS-данных в моем экземпляре локального сервера с базой данных: SqlServerDb и MysqlDb, и это будет извлекать ниже записи, количество которых не соответствует:
Итак, я пытаюсь получить эти записи из источника (Sql server Db) в MySQL, значение столбца которого не соответствует.
Ожидаемый результат:
Id Amount
1 1000
2 2000
3 3000
Итак, есть ли способ достичь этого сценария?