Sql 多行update语句,其中记录=复合键

Sql 多行update语句,其中记录=复合键,sql,sql-server,Sql,Sql Server,是的,我知道表名与字段名一样已更改,因此可能会有点混淆 我正在尝试批量更新,实际上我想传入一个XXXX和YYYY列表,它们共同构成一个复合键,我想更新与复合键列表匹配的所有记录,下面的语句将在满足所有条件的情况下更新单个记录,但是我想修改where子句,使其与IN语句类似,允许我更新多个记录。。。我想把它调整成 IN ('1','2','3') IN ('5','6','7') 但这带来了另一个问题,因为对于复合密钥的概念,它们对1-5、2-6、3-7是有效的,但是任何其他组合都是无效的 我是

是的,我知道表名与字段名一样已更改,因此可能会有点混淆

我正在尝试批量更新,实际上我想传入一个XXXX和YYYY列表,它们共同构成一个复合键,我想更新与复合键列表匹配的所有记录,下面的语句将在满足所有条件的情况下更新单个记录,但是我想修改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  

另一种方法是连接两列,并将其用作比较对,就像它是单个列一样:

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

多行更新语法往往是后端特定的,因此您应该在问题中包含这些语法。您还说要传递一个值列表。这不仅是后端特定的,而且在不同的客户机上,方法也会有所不同。因此,您需要包括正在使用的客户端
 where convert(varchar, d_id) + ' ' + convert(varchar, [uid]) 
       in ('1 5', '2 6', '3 7')