chaoggzxi44 2015-01-15 15:32 采纳率: 50%
浏览 4414
已采纳

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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建