当TBL2中的所有引用都等于给定值时,更新TBL1中的1条记录

时间:2009-09-28 11:29:26

标签: sql sql-server sql-server-2005 tsql stored-procedures

我有两个表,1索引电子邮件广告系列的详细信息。第二个表详细说明了此广告系列的收件人,以及他们是否已回复电子邮件等。

我需要创建一个存储过程,当TBL2中的所有引用(收件人)的状态都为> 1时,可以更新TBL1中“主记录”的状态。

为简单起见,表结构可以假定为;

TBL1

key | Title | Status(default 1)


TBL2

Key | TBL1_Key | Recipient | Status(default 0)

基本上我需要做的是将TBL1中的每条记录的状态(每次呼叫最多100个)(其状态已经== 1)设置为“2”,此时TBL2中的所有相应记录的状态均为> ; 1。

记录链接在TBL1.key = TBL2.TBL1_key

希望能够清楚地解释这一点,并且你可以给我一些帮助。

一如既往....感谢!!!!

2 个答案:

答案 0 :(得分:2)

UPDATE   tbl1 t1
SET      status = 2
WHERE    status = 1
AND      NOT EXISTS
         (
         SELECT  NULL
         FROM    tbl2 t2
         WHERE   t2.key = t1.key
                 AND t2.status <= 1
         )

答案 1 :(得分:2)

如果我正确理解您的要求,则可以从TBL2中的状态值导出TBL1中的状态。因此TBL1中的状态是多余的,可以省略。相反,您可以定义一个列出TBL1中所有条目的视图,并包含另一个列,您可以根据TBL2上的条目计算状态。你可以,例如计算Status&lt;的条目数TBL2中为2,当该数字为0时返回总体状态2