有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