有2张表 一个学生表,一个状态表
学生表里面有个字段是学生奖项(1,2,3) 对应的奖项名称是状态表里面的内容。
!!!
主要内容:
是通过学生的id(批量)修改奖项(awards)这个字段,每个青年的奖项可能不同(如:A学生有:2,3。B学生有:3,4)。奖项也是含有多个值的(如1,2,3,4,5。。)
现在要去掉其中一个奖项,或者增加一个奖项。
sql语句要如何写?用ibatis如何操作。
有2张表 一个学生表,一个状态表
学生表里面有个字段是学生奖项(1,2,3) 对应的奖项名称是状态表里面的内容。
!!!
主要内容:
是通过学生的id(批量)修改奖项(awards)这个字段,每个青年的奖项可能不同(如:A学生有:2,3。B学生有:3,4)。奖项也是含有多个值的(如1,2,3,4,5。。)
现在要去掉其中一个奖项,或者增加一个奖项。
sql语句要如何写?用ibatis如何操作。
下面是对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