SQL合并插入另一个表

iLe*_*ing 8 t-sql sql-server sql-merge

我想创建一个合并,它将比较两个表并将不匹配的值插入另一个第三个表或表变量,如下所示:

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())
Run Code Online (Sandbox Code Playgroud)

你们能帮助我使用其他一些结构来改造它吗?

mar*_*c_s 11

不能这样做.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
Run Code Online (Sandbox Code Playgroud)


小智 8

你可以很容易地做到这一点......

您可以将INSGE语句包装在INSERT INTO FROM中:http:
//technet.microsoft.com/en-us/library/bb510625.aspx#sectionToggle2

-要么-

您可以在merge语句中直接执行此操作:

快速举例:

WHEN NOT MATCHED THEN
    DELETE
OUTPUT Deleted.* INTO dbo.MyTable;
Run Code Online (Sandbox Code Playgroud)

这会将不匹配项插入到现有目标表中.您可以使用更新,插入,删除的v表来指导其他地方的数据.