Я хочу, чтобы создать объединение, которое сравнить две таблицы и вставки не совпавшие значений в другую третью таблицу или таблицы переменной что-то вроде этого:SQL Слияния с вставки в другую таблицу
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())
ли вы, ребята, помочь меня преобразовать его, используя некоторые другие конструкции.
Есть ли альтернатива 'NOT IN' в этом случае? Что-то вроде 'JOIN', который перенастраивает все строки, которые не были' JOIN'? Другой, тогда 'LEFT JOIN' +' IS NULL'. Кроме того, нужен ли CTE? Разве он не может «ВСТАВИТЬСЯ В ОТКРЫТИЕ ОТ ВЫБРАТЬ NonMatchedData»? – Alexandre
@PeekaySwitch: конечно - но тогда вы ** ARE ** выполняете 'LEFT OUTER JOIN' и проверяете, что столбец из' dbo.TargetTable' является 'NULL' .... Я не вижу, какой другой вариант быть там, действительно .... –
Знаете ли вы, что на вершине вашей головы есть лучшие возможности? Я ожидал бы, что 'LEFT OUTER JOIN' будет более эффективным, но, возможно, они близки друг к другу, я просто старался избегать использования' NOT IN' с огромными количествами данных в 'Where' (Like ID) – Alexandre