首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多行更新语句,其中record =组合键

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

Stack Overflow用户
提问于 2014-07-11 17:23:45
回答 2查看 1K关注 0票数 0

是的,我知道表名已经和字段名一样被更改了,所以可能有点混乱。

我正在尝试进行批处理更新,实际上我想传递一个XXXX和YYYY的列表,这两个列表共同构成一个复合键,我想更新所有与复合键列表匹配的记录,下面的语句将更新满足所有条件的单个记录,但我想修改where子句,使其类似于in语句中允许我更新多条记录的内容.我想把它调整成

代码语言:javascript
复制
IN ('1','2','3')
IN ('5','6','7')

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

我是否可以通过插入IN语句或等效项来代替XXXX和YYYY来实现这一点?

代码语言:javascript
复制
  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  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-11 18:02:49

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-07-11 18:32:46

另一种方法是将两列连接起来,并使用它来比较这两个列,就好像它是一个单独的列一样:

代码语言:javascript
复制
 where convert(varchar, d_id) + ' ' + convert(varchar, [uid]) 
       in ('1 5', '2 6', '3 7')

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24703244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档