是的我知道表名已经更改了字段名称,所以可能有点令人困惑
我正在尝试进行批量更新,实际上我想传入一个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
答案 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')