Как правильно избежать вставки повторяющихся строк в таблицах данных SQL Server, которые не имеют ПК?
=====================================================================================================

 Я использую класс `SqlBulkCopy` в C # для быстрого копирования данных из одной базы данных SQL Server в другую. Базы данных находятся на разных серверах, а их данные не имеют ПК, поэтому процесс усложняется. 

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

 Я не могу использовать `SELECT *` потому что он генерирует `OutOfMemoryException` , поэтому я делаю `SELECT TOP X *` и загружаю эти данные в `DataTable` . В каждом `Datatable` я могу удалить дубликаты записей с помощью C #, но затем, когда я выбираю следующий TOP X, первая выбранная строка может быть равна последней, которая была в предыдущем `DataTable` и уже была вставлена в целевую базу данных. Переменная `DataTable` всегда `DataTable` и та же, она перезагружается! 

 Я хочу избежать дублирования записей, которые нужно вставить без создания ПК, потому что это не применимо к моему делу. Мне действительно нужно использовать `SqlBulkCopy` потому что быстрая копия является системным требованием. Любое предложение? Заранее спасибо! 

 Не используйте C #. 

 Вы можете щелкнуть правой кнопкой мыши исходную базу данных в SSMS и выбрать «Задачи», а затем «Сгенерировать скрипты». Выберите нужную таблицу и используйте мастер для создания сценариев вставки. Затем запустите их во второй базе данных. 

 Если это действие необходимо повторить, вы можете настроить [Linked Server](https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/linked-servers-database-engine) между двумя экземплярами SQL Server, а затем записать инструкцию insert из одного в другой в [хранимой процедуре](https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/create-a-stored-procedure) . Затем вы можете запустить эту хранимую процедуру, когда вам нужно, или [вызвать ее из C #](https://stackoverflow.com/questions/1260952/how-to-execute-a-stored-procedure-within-c-sharp-program) . 

 Если вы хотите, чтобы он регулярно запускался, вы могли бы настроить задание [в базе данных](https://msdn.microsoft.com/en-us/library/ms190268(v=sql.105).aspx) .