首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql exists副本

Sql exists副本
EN

Stack Overflow用户
提问于 2009-08-02 08:14:19
回答 3查看 132关注 0票数 0

我有一个mssql存储过程问题要问您的专家:

我有两个表table1,它总是检索新条目。然后我有另一个表table2,我需要将table1的内容复制到这个表中。

我需要检查一些行是否已经存在于table2中,如果存在,只需更新table2的更新时间戳,否则将其插入到table2中。

表可能相当大,大约有100k个条目,那么哪种方法最快呢?

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

总而言之:如果一行存在,Table1和Table2都会在Table2中更新该行的时间戳,否则只需将包含内容的新记录插入到Table1中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-02 08:23:31

这适用于所有版本的SQL Server。MERGE在SQL Server2008中也做同样的事情。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2009-08-02 08:22:34

如果您使用的是SQL Server2008,那么它有一个MERGE命令,可以根据需要执行插入或更新。

票数 2
EN

Stack Overflow用户

发布于 2009-08-02 08:23:11

鉴于这听起来像是一个ETL流程。您是否考虑过使用SQL Server Integration Services

如果您计划导出/加载/处理丢失的数据,那么在我看来,这是一种可行的方法。你还有一个额外的优势,那就是能够并行运行多个线程,并且有更多的选项来调整数据吞吐量和服务器内存利用率等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1218399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档