2012-09-10 65 views
0

我有两个表一个是临时表,另一个是数据库表。我需要比较两个表基于MM和ProjectID.If数据存在于@mtts但不是在tbl_snapshot然后我有将其插入在tbl_sanpshot比较和插入数据到表

@mtts 表([MM],[YYYY],[MONTH_START],[month_Finish],[专案编号],[ProjectedBillable],[ProjectedPayable],[ActualBilled],[ActualPaid ],[Total_To_Bill],[Total_To_Pay])

tbl_Snapshot ([MM],[YYYY],[MONTH_START],[month_Finish],[专案编号],[ProjectedBillable],[ProjectedPayable],[ActualBilled],[ ActualPaid],[向tal_To_Bill],[Total_To_Pay])。

荫新sql.so请帮我在这

+1

另一种选择是['MERGE'](http://msdn.microsoft.com/en-us/library/bb510625.aspx)语句。 – HABO

回答

1

您可以使用INSERT INTO...SELECTEXISTS解决您的问题,试试这个

INSERT INTO tbl_Snapshot([MM],[YYYY],[month_Start],[month_Finish], 
         [ProjectID],[ProjectedBillable],[ProjectedPayable], 
         [ActualBilled],[ActualPaid],[Total_To_Bill], 
         [Total_To_Pay]) 
SELECT * 
FROM mtts 
WHERE NOT EXISTS (SELECT * FROM tbl_Snapshot) 
1

这里相隔两个选项从约翰什么Woo建议。

使用左联接

INSERT INTO tbl_Snapshot 
SELECT * 
FROM @mtts mtts 
LEFT JOIN tbl_Snapshot ss ON mtts.MM = ss.MM AND mtts.ProjectID = ss.ProjectID 
WHERE ss.MM IS NULL AND ss.tbl_Snapshot IS NULL 

使用MERGE语句(从SQL Server 2008中开始工作)

MERGE tbl_Snapshot AS ss 
USING (SELECT * FROM @mtts) AS mtts 
ON mtts.MM = ss.MM AND mtts.ProjectID = ss.ProjectID 
WHEN NOT MATCHED THEN 
INSERT([MM],[YYYY],[month_Start],[month_Finish],[ProjectID],[ProjectedBillable],[ProjectedPayable], 
     [ActualBilled],[ActualPaid],[Total_To_Bill],[Total_To_Pay]) 
VALUES(mm.[MM],mm.[YYYY],mm.[month_Start],mm.[month_Finish],mm.[ProjectID],mm.[ProjectedBillable],mm.[ProjectedPayable], 
     mm.[ActualBilled],mm.[ActualPaid],mm.[Total_To_Bill],mm.[Total_To_Pay]); 

这是一个非常肮脏的方式(CAST为VARCHAR,然后MERGE,最后是COMPARE)

INSERT INTO tbl_Snapshot 
SELECT * 
FROM @mtts mtts 
WHERE CAST(mtts.MM AS vARCHAR(10)) + CAST(mtts.ProjectID AS VARCHAR(10)) 
NOT IN (SELECT CAST(ss.MM AS vARCHAR(10)) + CAST(ss.ProjectID AS VARCHAR(10)) FROM tbl_Snapshot ss) 
0

尝试此,

插入tbl_Snapshot SELECT * FROM @mtts 其中[MM]不是在(选择[MM]从tbl_Snapshot) 和[专案编号]不是在(选择tbl_Snapshot [专案编号])

谢谢,

Venkat