首页 文章

Sql存在副本

提问于
浏览
0

我为你的专家提供了一个mssql存储过程问题:

我有两个表[table1],它一直检索新的条目 . 然后我有另一个表[table2],我需要将[table1]的内容复制到 .

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

这些表可能相当大,大约有100k条目,所以这是最快的方法吗?

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

总结一下:如果存在一行[Table1]和[Table2],则更新[Table2]中行的时间戳,否则只需将带有内容的新记录插入[Table1] .

3 回答

  • 2

    这适用于所有版本的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)
    
  • 1

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

  • 0

    鉴于这听起来像ETL过程 . 你考虑过使用SQL Server Integration Services吗?

    如果您计划导出/加载/处理丢失的数据,那么这就是我的观点 . 您还可以获得额外的优势,即能够并行运行多个线程,以及更多选项来调整数据吞吐量和服务器内存利用率等 .

相关问题