2009-08-02 58 views
0

我对你有专家MSSQL存储过程的问题:的Sql存在副本

我有两个表[表1]它检索新条目,将全部的时间。然后我有另一个表[table2],我需要将[table1]的内容复制到。

我需要检查一些行是否已经存在于[table2]中,如果是这样,只需更新[table2]的Update-timestamp,否则将其插入到[table2]中。

表格可能比较大,大约有100k个条目,所以哪个是最快的方法呢?

应该注意,这是一个简化的想法,因为从[Table1] - > [Table2]复制新内容时会发生更多的数据处理。

总结: 如果存在一行,[Table1]和[Table2]两者都会更新[Table2]中该行的时间戳,否则只需将一个新的记录插入到[Table1]中。

+0

你从哪里得到这些标签? – gbn 2009-08-02 08:21:26

+0

对不起,标签? – Dofs 2009-08-02 08:22:10

+0

“mssql”和“storedprocedure” – gbn 2009-08-02 08:23:58

回答

1

这适用于所有版本的SQL Server。 MERGE在SQL Server 2008中也是如此。

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) 
2

如果您有SQL Server 2008,它有一个MERGE命令,可以根据需要进行插入或更新。

0

鉴于这听起来像一个ETL过程。你有没有考虑过使用SQL Server Integration Services

如果您正在计划导出/加载/处理数据丢失,那么这是我认为的方式。您还具有能够并行运行多个线程以及更多选项来调整数据吞吐量和服务器内存利用率等优势。