是的,我知道表名已经和字段名一样被更改了,所以可能有点混乱。
我正在尝试进行批处理更新,实际上我想传递一个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 发布于 2014-07-11 18:02:49
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发布于 2014-07-11 18:32:46
另一种方法是将两列连接起来,并使用它来比较这两个列,就好像它是一个单独的列一样:
where convert(varchar, d_id) + ' ' + convert(varchar, [uid])
in ('1 5', '2 6', '3 7')http://sqlfiddle.com/#!3/aecea/2
https://stackoverflow.com/questions/24703244
复制相似问题