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条)

报告相同问题?

悬赏问题

  • ¥200 关于#c++#的问题,请各位专家解答!
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀