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

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

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

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

4个回答

下面是对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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐