我有一个mssql存储过程问题要问您的专家:
我有两个表table1,它总是检索新条目。然后我有另一个表table2,我需要将table1的内容复制到这个表中。
我需要检查一些行是否已经存在于table2中,如果存在,只需更新table2的更新时间戳,否则将其插入到table2中。
表可能相当大,大约有100k个条目,那么哪种方法最快呢?
应该注意的是,这是一个简化的想法,因为从Table1 -> Table2复制新内容时会发生更多的数据处理。
总而言之:如果一行存在,Table1和Table2都会在Table2中更新该行的时间戳,否则只需将包含内容的新记录插入到Table1中。
发布于 2009-08-02 08:23:31
这适用于所有版本的SQL Server。MERGE在SQL Server2008中也做同样的事情。
UPDATE
table2
SET
timestampcolumn = whatever
WHERE
EXISTS (SELECT *
FROM table1
WHERE
table1.key = table2.key)
INSERT table2 (col1, col2, col3...)
SELECT col1, col2, col3...
FROM table1
WHERE
NOT EXISTS (SELECT *
FROM table2
WHERE
table2.key = table1.key)发布于 2009-08-02 08:22:34
如果您使用的是SQL Server2008,那么它有一个MERGE命令,可以根据需要执行插入或更新。
发布于 2009-08-02 08:23:11
鉴于这听起来像是一个ETL流程。您是否考虑过使用SQL Server Integration Services
如果您计划导出/加载/处理丢失的数据,那么在我看来,这是一种可行的方法。你还有一个额外的优势,那就是能够并行运行多个线程,并且有更多的选项来调整数据吞吐量和服务器内存利用率等。
https://stackoverflow.com/questions/1218399
复制相似问题