我想创建一个合并,它将比较两个表并将不匹配的值插入另一个第三个表或表变量中 像这样的东西:
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())
你们会帮助我使用其他一些结构来改造它吗?
答案 0 :(得分:10)
你只是不能这样做。 MERGE
仅在两个表上运行 - 源和目标。
根据您的要求,您需要例如使用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
答案 1 :(得分:8)
你可以很容易地做到这一点......
您可以将INSGE语句包装在INSERT INTO FROM中:
http://technet.microsoft.com/en-us/library/bb510625.aspx#sectionToggle2
-OR -
您可以直接在merge语句中执行此操作:
快速举例:
WHEN NOT MATCHED THEN
DELETE
OUTPUT Deleted.* INTO dbo.MyTable;
这会将不匹配项插入现有目标表中。您可以使用更新,插入,删除的v表来引导其他地方的数据。