sqlserver儲存過程實現資料批量刪除--分割字串實現
阿新 • • 發佈:2018-12-05
寫的儲存過程,接收的引數的一個字串,通過分割字串從而實現批量刪除。
IF (@operation = 'delete')
BEGIN
DECLARE @temp nvarchar(200)
DECLARE @splitchar nvarchar(1)
SET @splitchar=','
SET @[email protected][email protected]
WHILE CHARINDEX(@splitchar,@userId)>0
BEGIN
SET @temp=SUBSTRING(@userId,1,CHARINDEX(@splitchar,@userId)-1)
IF(LEN(@temp)>0)
BEGIN
PRINT(@temp)
DELETE from TB_user WHERE user_id [email protected];
END
SET @userId=RIGHT(@userId,LEN(@userId)-CHARINDEX(@splitchar,@userId))
PRINT(@userId)
END
END
用到的函式有:CHARINDEX();LEN();RIGHT();SUBSTRING()
charindex(expression1 , expression2 )表示:
從expression2字串中指定的位置處開始查詢是否包含expression1字串。如果能夠從expression2字串中查詢到expression1字串則返回expression1在
expression2出現的位置;反之,返回0
LEN(expression1 )表示:返回expression1 的長度;
RIGHT(expression,number)表示:從expression右邊開始,返回長度為number的字串。
SUBSTRING(expression, start, length)表示:返回從expression的start位置開始擷取長度為length 的字串。
附上完整的儲存過程,是用的操作的,包含增加使用者,修改使用者,批量刪除使用者。
檔案:sp_query_掌上微課_使用者操作.sql
USE [ZSWK]
GO
/****** Object: StoredProcedure [dbo].[sp_query_掌上微課_使用者操作] Script Date: 12/05/2018 11:10:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- exec sp_query_掌上微課_使用者操作 'insert','','20181204測試','123456','','測試001','男','','','1','','','123',''
-- exec sp_query_掌上微課_使用者操作 'update','10','test001','','','','','','null','','','','',''
-- exec sp_query_掌上微課_使用者操作 'delete','11','null','null','null','null','null','null','null','null','null','null','null','null'
ALTER PROC [dbo].[sp_query_掌上微課_使用者操作]
@operation varchar(255),
@userId varchar(255),
@userName varchar(255),
@password varchar(255),
@phone varchar(255),
@fullname varchar(255),
@sex varchar(255),
@area varchar(255),
@createAt varchar(255),
@isTeacher varchar(255),
@teacherInfo varchar(4000),
@icon varchar(4000),
@empNumber varchar(255),
@userAccount varchar(255)
AS
BEGIN
SET NOCOUNT ON
IF (@operation = 'insert')
BEGIN
INSERT INTO TB_user(user_name,password,fullname,phone,sex,area,create_at,isTeacher,teacher_info,icon,empNumber,userAccount)
VALUES (@userName,@password, @fullname, @phone,@sex,@area,@createAt,@isTeacher,@teacherInfo,@icon,@empNumber,@userAccount)
END
IF (@operation = 'delete')
BEGIN
DECLARE @temp nvarchar(200)
DECLARE @splitchar nvarchar(1)
SET @splitchar=','
SET @ [email protected][email protected]
WHILE CHARINDEX(@splitchar,@userId)>0
BEGIN
SET @temp=SUBSTRING(@userId,1,CHARINDEX(@splitchar,@userId)-1)
IF(LEN(@temp)>0)
BEGIN
PRINT(@temp)
DELETE from TB_user WHERE user_id [email protected];
END
SET @userId=RIGHT(@userId,LEN(@userId)-CHARINDEX(@splitchar,@userId))
PRINT(@userId)
END
END
IF (@operation = 'update')
BEGIN
DECLARE @sql VARCHAR(5000)
DECLARE @whereSql VARCHAR(5000)
SET @sql = 'UPDATE TB_user SET'
SET @whereSql = ''
IF ( @userName !='NULL' and @userName != '')
BEGIN
SET @whereSql [email protected]+ ' user_name = '+''''[email protected]+''''+','
END
IF ( @password !='NULL')
BEGIN
SET @whereSql [email protected]+ ' password = '+''''[email protected]+''''+','
END
IF ( @phone !='NULL')
BEGIN
SET @whereSql [email protected]+ ' phone = '+''''[email protected]+''''+','
END
IF ( @fullname !='NULL')
BEGIN
SET @whereSql [email protected]+ ' fullname = '+''''[email protected]+''''+','
END
IF ( @sex !='NULL')
BEGIN
SET @whereSql [email protected]+ ' sex = '+''''[email protected]+''''+','
END
IF ( @area !='NULL')
BEGIN
SET @whereSql [email protected]+ ' area = '+''''[email protected]+''''+','
END
IF ( @createAt !='NULL')
BEGIN
SET @whereSql [email protected]+ ' create_at = '+''''[email protected]+''''+','
END
IF ( @isTeacher !='NULL')
BEGIN
SET @whereSql [email protected]+ ' isTeacher = '+''''[email protected]+''''+','
END
IF ( @teacherInfo !='NULL')
BEGIN
SET @whereSql [email protected]+ ' teacher_info = '+''''[email protected]+''''+','
END
IF ( @icon !='NULL')
BEGIN
SET @whereSql [email protected]+ ' icon = '+''''[email protected]+''''+','
END
IF ( @empNumber !='NULL')
BEGIN
SET @whereSql [email protected]+ ' empNumber = '+''''[email protected]+''''+','
END
IF ( @userAccount !='NULL')
BEGIN
SET @whereSql [email protected]+ ' userAccount = '+''''[email protected]+''''+','
END
SET @sql = @[email protected]
IF ( charindex(',',@sql) > 0)
BEGIN
PRINT @sql
SET @sql = SUBSTRING(@sql,0,(LEN(@sql)) )
SET @sql = @sql + ' WHERE user_id = '+ @userId
PRINT @sql
EXEC (@sql)
END
ELSE
BEGIN
RETURN
END
END
END