2016-08-03 2 views
-1

Я использую SSDT для создания сценариев совокупности данных. SSDT создает одну инструкцию INSERT для каждой строки в таблице.Ищет инструмент, который синхронизирует данные таблицы поиска, а не только создавая членов INSERT

Проблема в том, что некоторые из строк данных поиска уже существуют в целевой базе данных. Таким образом, инструкции INSERT генерируют ошибки PK-нарушения.

Кроме того, некоторые строки требуют обновления, а не INSERT.

Есть ли какой-либо инструмент (надеюсь, бесплатный), который позволит мне синхронизировать (или объединять) данные поиска. Без инструмента мои сценарии популяции данных будут довольно сложными и трудоемкими.

ответ

1

Используйте sp_generate_merge для создания сценария, который вы вставляете в свой пост-развертывающий скрипт.

Ed

+0

Это выглядит многообещающим. Если я использую инструкции INSERT для заполнения данных в #TempTable, могу ли я использовать sp_generate_merge для заполнения изменений в целевой производственной таблице? –

+1

sp_generate_merge - https://github.com/readyroll/generate-sql-merge –

0

SQL Data Compare from RedGate является одним из доступных и доступен как 30-дневная бесплатная пробная версия. Вы можете использовать графический интерфейс пользователя или интерфейс командной строки для автоматизации обновлений. Продукт не лишен своих недостатков, но он может быть очень полезным.

0

Если вы используете SSDT для заполнения таблицы поиска, не используйте отдельный INSERT, UPDATE и DELETE заявления, использование MERGE вместо:

merge into dbo.Colors as target 
using (
    values 

    -- Id , Code  , Name         

    ( 1 , 'RED'  , N'Red'  ), 
    ( 2 , 'YELLOW' , N'Yellow' ), 
    ( 3 , 'GREEN'  , N'Green' ), 
    ( 4 , 'BLUE'  , N'Blue' )   

) as source (Id, Code, Name) on target.Id = source.Id 

when matched then 
    update set 
     Code = source.Code , 
     Name = source.Name 

when not matched by target then 
    insert (Id, Code, Name) 
    values (Id, Code, Name) 

when not matched by source then 
    delete; 
+0

Идея замечательная. У меня есть более 15 таблиц поиска для синхронизации или заполнения. Вы предлагаете передать код всем операторам слияния? –

+0

MERGE - лучшее решение для этой задачи. Мы сохраняем все скрипты таблицы поиска в операциях MERGE. –

+0

Ручное кодирование многих таблиц поиска со многими строками в них кажется непрактичным, и оно не является продуктивным. Передаете ли вы код всего оператора слияния? –