Уровень таблицы различная и синхронизирующая процедура T-SQL

Я интересуюсь исходным кодом T-SQL для синхронизации таблицы (или возможно подмножество его) с данными из другой подобной таблицы. Эти две таблицы могли содержать любые переменные, например, я мог иметь

 base table    source table 
 ==========    ============
 id     val    id       val
 ----------    ------------
 0        1    0          3
 1        2    1          2
 2        3    3          4

или

 base table             source table 
 ===================    ==================
 key    val1    val2    key   val1    val2
 -------------------    ------------------
 A         1       0    A        1       1  
 B         2       1    C        2       2
 C         3       3    E        4       0

или любые две таблицы, содержащие подобные столбцы с аналогичными именами. Я хотел бы смочь к

  • проверьте, что эти две таблицы имеют соответствие столбцам: исходная таблица имеет точно те же столбцы как базовая таблица и соответствие типов данных
  • сделайте разность от базовой таблицы до исходной таблицы
  • сделайте необходимые обновления, удаляет и вставляет для изменения данных в базовой таблице для соответствия исходной таблицы
  • дополнительно ограничьте разность подмножеством базовой таблицы,

предпочтительно с хранимой процедурой. Кто-либо записал сохраненный proc для этого, или Вы могли указать на источник?

5
задан S.L. Barth - Reinstate Monica 24 July 2012 в 13:00
поделиться

3 ответа

Интересный вопрос.

Вы могли бы начать с EXCEPT - INTERSECT

http://msdn.microsoft.com/en-us/library/ms188055.aspx

Вот готовое решение, может помочь вам

http://www.sqlservercentral.com/scripts/Miscellaneous/30596/

1
ответ дан 14 December 2019 в 13:33
поделиться

В SQL Server 2008 есть новый оператор слияния . Он очень гибкий, хотя и немного сложный для написания.

В качестве примера следующий запрос синхронизирует таблицы @base и @source . Это ограничено подмножеством @base , где id <> 2 :

MERGE @base as tgt
USING @source as src
ON tgt.id = src.id and tgt.val = src.val
WHEN NOT MATCHED BY TARGET
    THEN INSERT (id, val) values (src.id, src.val)
WHEN NOT MATCHED BY SOURCE AND tgt.id <> 2
    THEN DELETE
4
ответ дан 14 December 2019 в 13:33
поделиться

Не уверен, что это может быть полезно в вашей конкретной ситуации, но такого рода операции обычно и относительно легко выполняются с помощью внешних инструментов (SQL Workbench diff, SQL Compare и т.д.). Это даже можно сделать с помощью сценария, только, вероятно, не вызываемого из процедуры T-SQL.

1
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: