chaoggzxi44
2015-01-15 15:32
采纳率: 50%
浏览 4.4k

sql 批量更新 一个(还有多个选项的)字段

有2张表 一个学生表,一个状态表
学生表里面有个字段是学生奖项(1,2,3) 对应的奖项名称是状态表里面的内容。

!!!
主要内容:
是通过学生的id(批量)修改奖项(awards)这个字段,每个青年的奖项可能不同(如:A学生有:2,3。B学生有:3,4)。奖项也是含有多个值的(如1,2,3,4,5。。)
现在要去掉其中一个奖项,或者增加一个奖项。

sql语句要如何写?用ibatis如何操作。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • save4me 2015-01-16 02:03
    已采纳

    下面是对SQL Server的,如果是其他数据库,可以使用MID函数替换SUBSTRING函数。
    如果你需要关联其他的表,在语句中加入FROM来设置关联关系。
    如果你不需要限制学生ID,可以在WHERE里面移除
    更新和删除语句都会先判断是否有需要更新和删除的奖项
    添加语句会先判断是否已经包含了需要添加的奖项

    更新奖项如下

    DECLARE @P NVARCHAR(50)
    DECLARE @P1 NVARCHAR(50)
    DECLARE @ID INT
    SET @P = '1'
    SET @P1 = '90'
    SET @ID = 1
    UPDATE 学生表 T
    SET T.[awards] = SUBSTRING(REPLACE(',' + T.[awards] + ',', ',' + @P + ',', ',' + @P1 + ','), 2, LEN(T.[awards]) - LEN(@P) + LEN(@P1))
    WHERE ',' + T.[awards] + ',' LIKE  '%,' + @P + ',%'
        AND T.[id] = @ID
    

    添加奖项如下

    DECLARE @P NVARCHAR(50)
    DECLARE @ID INT
    SET @P = '90'
    SET @ID = 1
    UPDATE 学生表 T
    SET T.[awards] = T.[awards] + ',' + @P
    WHERE ',' + T.[awards] + ',' NOT LIKE  '%,' + @P + ',%'
        AND T.[id] = @ID
    

    删除奖项

    DECLARE @P NVARCHAR(50)
    DECLARE @ID INT
    SET @P = '2'
    SET @ID = 1
    UPDATE T
    SET T.[awards] = SUBSTRING(REPLACE(',' + T.[awards] + ',', ',' + @P + ',', ','), 2, LEN(T.[awards]) - LEN(@P) - CASE WHEN T.[awards] = @P THEN 0 ELSE 1 END)
    WHERE ',' + T.[awards] + ',' LIKE  '%,' + @P + ',%'
        AND T.[id] = @ID
    
    已采纳该答案
    打赏 评论
  • devmiao 2015-01-15 15:53

    可以使用事务实现批量处理,自己google下

    打赏 评论
  • danielinbiti 2015-01-15 16:04

    什么数据库,一般数据库有replace,可以用replace进行字符串替换。

    打赏 评论
  • 添加直接用拼接函数就行,拼接上新增的奖项,如果是删除那就直接用替换函数替换掉删除的奖项,删除注意下,号的处理就行了吧

    打赏 评论

相关推荐 更多相似问题