比较Temp表和Main表以查找匹配项

时间:2012-09-07 07:25:31

标签: sql sql-server-2008

我有两张桌子@mtss table:

@mtss
( [MM],[YYYY],[month_Start],[month_Finish],[ProjectID],[ProjectedBillable],[ProjectedPayable],[ActualBilled],[ActualPaid],[Total_To_Bill],[Total_To_Pay])

tbl_Snapshot ([MM],[YYYY],[month_Start],[month_Finish],[ProjectID],[ProjectedBillable],[ProjectedPayable],[ActualBilled],[ActualPaid],[Total_To_Bill],[Total_To_Pay]
)

我需要比较两个表并找到匹配

如果tbl_snapshot [MM]和[ProjectId]匹配,则删除tbl_snapshot中的记录并从@mtts插入记录。

提前致谢。

2 个答案:

答案 0 :(得分:2)

自2008年以来,您可以使用MERGE执行单个逻辑操作:

;merge into tbl_Snapshot s
using @mtss m on s.MM = m.MM and s.ProjectId = m.ProjectId
when matched then update
set
    YYYY = m.YYYY,
    month_Start = m.month_Start
    /* Other columns as well, not going to type them all out */
;

如果数据只存在于一个表而不存在另一个表中,并且存在加法匹配子句,这也很容易扩展到您可能必须处理的其他情况。


当然,进一步思考,在这种情况下,一个简单的UPDATE也可以。 DELETE后跟INSERT(其中已删除和插入的行通过键相关)相当于UPDATE

答案 1 :(得分:0)

类似的东西:

DELETE tbl_snapshot 
FROM tbl_snapshot ss
INNER JOIN @mtss m ON m.MM = ss.MM AND m.ProjectId = ss.ProjectId

(我把代码直接编写到这个编辑器中,因此它可能有错误,但它应该让你知道如何继续)