我想用我的sql server数据库中的表“Met”替换来自应用程序的新数据表。 我的基本思路是循环新表中的每一行并比较现有表。
我使用了存储过程,但它只具有“插入”和“更新”功能。我是否需要先删除旧表?
由于
对于每一行,我想循环以下存储过程。
;WITH CTE AS (SELECT skey=@skey,ProbMetID=@ProbMetID,Interval=@Interval,Counts=@Counts)
MERGE Met AS TARGET
USING CTE SOURCE
ON SOURCE.skey = TARGET.skey
WHEN MATCHED THEN
UPDATE
SET ProbMetID = SOURCE.ProbMetID,
Interval = SOURCE.Interval,
Counts = SOURCE.Counts,
WHERE skey = @skey
WHEN NOT MATCHED THEN
INSERT INTO Met(skey,ProbMetID,Interval,Counts)
VALUES(@skey,@ProbMetID,@Interval,@Counts);
答案 0 :(得分:1)
MERGE语句包含DELETE函数。查看Pinal Dave的帖子:http://blog.sqlauthority.com/2008/08/28/sql-server-2008-introduction-to-merge-statement-one-statement-for-insert-update-delete/
我发现从app层执行此操作的最简单方法是将所有内容插入临时表,然后在临时表和实际表之间执行整个MERGE操作。最重要的是,您可以在一次交易中完成整个事情。此外,您可以将应用程序表批量插入到临时表中,以获得超级棒的db speed(TM)。