1. 程式人生 > >sqlserver儲存過程實現資料批量刪除--分割字串實現

sqlserver儲存過程實現資料批量刪除--分割字串實現

寫的儲存過程,接收的引數的一個字串,通過分割字串從而實現批量刪除。

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