编写此更新语句的正确方法是什么?

时间:2011-11-25 11:52:12

标签: sql sql-server-2008 tsql

我正在尝试编写一个更新两个表的过程,但我对语法有些不了解。

这些表名为SupportTicketsTbltblSupportEvent,这些表之间的链接是名为tblTicketsInEvents的第三个表。

tblSupportEvent列出了人员计划中的所有事件,每个事件都有一个开始和结束时间,此过程作为sql作业运行并检查当前时间是否大于事件结束时间,如果是这样,它会更新其状态。

现在这个的语法很简单:

UPDATE 
    tblSupportEvent
SET 
    [status] = 3 
WHERE 
    eventend < CURRENT_TIMESTAMP
AND
    [status] = 1

现在这是我的问题,一个事件链接到故障单,所以当链接到故障单的事件过期时,我想将分配给值的故障单设置回0。

SELECT查询显示表之间的关系:

SELECT 
    *
FROM 
    tblSupportEvent e 
JOIN 
    tblTicketsInEvents tie 
ON 
    e.id = tie.eventID 
JOIN 
    SupportTicketsTbl t 
ON 
    t.TicketID = tie.ticketID 

我能想到解决这个问题的方法是将所有过期的票证ID选入表格然后在SupportTicketsTbl上进行更新,其中票证ID在我的表变量中,尽管这看起来有点乱。使用更新语句/连接等有更好的方法吗?

我问,因为虽然我可以自己解决问题,但它可能会执行得足够快,就像知道这样做的正确方法。

谢谢

1 个答案:

答案 0 :(得分:3)

我相信这样做会比创建临时表更好。

UPDATE SupportTicketsTbl
SET toUpdate = newVal
WHERE
    ticketID IN (
        SELECT id
        FROM tblSupportEvent
        WHERE expiredCondition
    )