Я интересуюсь исходным кодом 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 для этого, или Вы могли указать на источник?
Интересный вопрос.
Вы могли бы начать с EXCEPT - INTERSECT
http://msdn.microsoft.com/en-us/library/ms188055.aspx
Вот готовое решение, может помочь вам
http://www.sqlservercentral.com/scripts/Miscellaneous/30596/
В 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
Не уверен, что это может быть полезно в вашей конкретной ситуации, но такого рода операции обычно и относительно легко выполняются с помощью внешних инструментов (SQL Workbench diff, SQL Compare и т.д.). Это даже можно сделать с помощью сценария, только, вероятно, не вызываемого из процедуры T-SQL.