程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ibatis-sql 批量更新 一個(還有多個選項的)字段

ibatis-sql 批量更新 一個(還有多個選項的)字段

編輯:編程綜合問答
sql 批量更新 一個(還有多個選項的)字段

有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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved