首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >insert insert insert后删除

insert insert insert后删除
EN

Stack Overflow用户
提问于 2011-02-10 02:10:48
回答 2查看 3K关注 0票数 2

我继承了一个噩梦般的WTF存储过程,它将300k行插入到一个出站营销电子邮件表中。我们不希望将邮件排队到正在退回的电子邮件地址。我们有一个单独的退回电子邮件表。

正确的做法是修改存储过程,使其不插入用于退回电子邮件的行。

没有人想要触摸噩梦般的集群,这就是这个特殊的sproc。因此,我们正在考虑向存储过程中添加一个delete命令。

代码语言:javascript
复制
BEGIN TRANSACTION

    --400+ lines of nightmarish WTF T-SQL, string and XML replacement nonsense goes here--
    DELETE FROM EmailQueueItems 
WHERE ToAddress IN 
    (SELECT EmailStatuses.Email FROM EmailStatuses 
        INNER JOIN EmailEventTypes on EmailEventTypes.EmailEventTypeId = EmailStatuses.EmailEventTypeId
        WHERE  EmailEventTypes.CanSendMarketing = 0)
COMMIT TRANSACTION

所以..。这样行得通吗?我可以在事务提交之前从表中删除插入吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-10 02:17:14

可以,您可以在事务内的表中插入和删除记录。

尝试此示例以进行概念验证:

代码语言:javascript
复制
declare @foo table (id int)
begin tran

    insert into @foo 
        values (1),(2),(3)

    delete @foo where id = 2

    select * from @foo --will result in 2 rows: 1 and 3

commit tran
票数 0
EN

Stack Overflow用户

发布于 2011-02-10 05:20:16

我认为处理插入并正确地只插入您想要的记录是比插入然后删除更好的选择。插入250,000条记录与插入300,000条记录,然后删除50,000条记录之间应该存在显著的性能差异。您正在处理不需要处理的额外100,000条记录。咬紧牙关,正确地修复这个过程。

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

https://stackoverflow.com/questions/4948747

复制
相关文章

相似问题

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