多行更新语句,其中record =复合键

时间:2014-07-11 17:23:45

标签: sql sql-server

是的我知道表名已经更改了字段名称,所以可能有点令人困惑

我正在尝试进行批量更新,实际上我想传入一个XXXX和YYYY列表,它们组成一个复合键,我想更新所有与复合键列表匹配的记录,bellow语句将更新单个记录,其中满足所有条件,但我想修改where子句是一个IN语句的行,这将允许我更新多个记录...我正在考虑将其调整为

IN ('1','2','3')
IN ('5','6','7')

但这带来了另一个问题,因为他们对1-5,2-6,3-7组合的复合键是有效的,但任何其他组合都无效...

无论如何我可以通过插入一个IN语句或等效语句代替XXXX和YYYY来实现这一点

  UPDATE Table

  SET   id = 99,
        status_id = 45,
        change_date = GetDate(),
        reason = (SELECT Meaning FROM T2 WHERE code = @StatusCode),
        d_id = T2.d_id
  FROM
        Job
        JOIN T2 ON gid = T2.gid
              AND j_id = T2.Ref_id

  WHERE T2.Status = 0
                           /**** this and is supposed to match a composite key ****/
        AND d_id = XXXX
        AND [uid] = YYYY  

2 个答案:

答案 0 :(得分:1)

UPDATE  t
SET     id = 99
FROM    (
        VALUES
        ('xxx', 'yyy'),
        ('zzz', 'ttt')
        ) v (x, y)
JOIN    mytable t
ON      t.d_id = x
        AND t.[uid] = y

答案 1 :(得分:0)

另一种方法是连接两个列并使用它来比较该对,就像它是一个列一样:

 where convert(varchar, d_id) + ' ' + convert(varchar, [uid]) 
       in ('1 5', '2 6', '3 7')

http://sqlfiddle.com/#!3/aecea/2