Слияние SQL с вставкой в другую таблицу
Я хочу создать слияние, которое будет сравнивать две таблицы и вставлять не совпадающие значения в другую третью таблицу или переменную таблицы что-то вроде этого:--2-->
MERGE Assets AS target
USING (@id, @name)FROM Sales AS source (id, name) ON (target.id = SOURCE.id)
WHEN MATCHED THEN
UPDATE SET target.Status = @status, target.DateModified = SYSUTCDATETIME()
WHEN NOT MATCHED THEN
INSERT INTO @tableVar (id, name, status, dateModified)
VALUES (@id, @name, @status, SYSUTCDATETIME())
не могли бы вы, ребята, помочь мне преобразовать его, используя некоторые другие конструкции.
2 ответов
вы просто не может сделать это. MERGE
работает только с двумя таблицами-source и target.
для вашего требования вам нужно, например, использовать CTE (общее табличное выражение), чтобы найти строки, которые не совпадают, и вставить их в третью таблицу.
что-то типа:
;WITH NonMatchedData AS
(
-- adapt this as needed - just determine which rows match your criteria,
-- and make sure to return all the columns necessary for the subsequent INSERT
SELECT (columns)
FROM dbo.SourceTable
WHERE ID NOT IN (SELECT DISTINCT ID FROM dbo.TargetTable)
)
INSERT INTO dbo.ThirdTable(Col1, Col2, ....., ColN)
SELECT Col1, Col2, ....., ColN
FROM NonMatchedData
вы можете сделать это очень легко...
вы можете обернуть оператор MERGE в INSERT в FROM:
http://technet.microsoft.com/en-us/library/bb510625.aspx#sectionToggle2
или
вы можете сделать это прямо в инструкции merge:
пример:
WHEN NOT MATCHED THEN
DELETE
OUTPUT Deleted.* INTO dbo.MyTable;
это вставит несоответствия в существующую таблицу назначения. Вы можете использовать обновленные, вставленные, удаленные v-таблицы для направления данных прочие места.