通过存储过程进行字符串分拆,在同时删除多条记录的时候有用。
2008-04-26 16:09
561 查看
1.存储过程
ALTER PROCEDURE dbo.GetFirstWord
[align=left] @SourceString NVARCHAR(4000) = NULL OUTPUT,[/align]
[align=left] @FirstWord NVARCHAR(4000) = NULL OUTPUT[/align]
[align=left]AS[/align]
[align=left] SET NOCOUNT ON[/align]
[align=left] DECLARE @Oldword NVARCHAR(4000)[/align]
[align=left] DECLARE @Length INT[/align]
[align=left] DECLARE @CommaLocation INT[/align]
[align=left] [/align]
[align=left] SELECT @Oldword = @SourceString[/align]
[align=left] IF NOT @Oldword IS NULL [/align]
[align=left] BEGIN[/align]
[align=left] --get the first seperate chara location[/align]
[align=left] SELECT @CommaLocation = CHARINDEX(',',@Oldword) [/align]
[align=left] --get the length[/align]
[align=left] SELECT @Length = DATALENGTH(@Oldword)[/align]
[align=left] --Do Not Find Seperate,There is last Word [/align]
[align=left] IF @CommaLocation = 0 [/align]
[align=left] BEGIN[/align]
[align=left] SELECT @FirstWord = @Oldword[/align]
[align=left] SELECT @SourceString = null[/align]
[align=left] RETURN @Length[/align]
[align=left] [/align]
[align=left] END[/align]
[align=left] -- get the first word[/align]
[align=left] SELECT @FirstWord = SUBSTRING(@Oldword,1,@CommaLocation-1)[/align]
[align=left] --trim the first word and separate[/align]
[align=left] SELECT @SourceString=SUBSTRING(@Oldword,@CommaLocation+1,@Length-@CommaLocation) [/align]
[align=left] [/align]
[align=left] RETURN @Length - @CommaLocation[/align]
[align=left] END[/align]
[align=left] ELSE[/align]
[align=left] SELECT @FirstWord = null[/align]
[align=left] SELECT @Length = 0[/align]
[align=left] RETURN 0[/align]
[align=left]------------------------------------------------[/align]
[align=left][/align]
[align=left]ALTER PROCEDURE dbo.DeleteUserdataByIdlist[/align]
[align=left] @idlist nvarchar(1000) [/align]
[align=left]AS[/align]
[align=left] SET NOCOUNT ON[/align]
[align=left] DECLARE @FirstWORD NVARCHAR(1000)[/align]
[align=left] DECLARE @FIRSTID int[/align]
[align=left] DECLARE @LENGTH int[/align]
[align=left] SET @LENGTH = DATALENGTH(@idlist)[/align]
[align=left] while @LENGTH > 0[/align]
[align=left] BEGIN[/align]
[align=left] EXEC @LENGTH = GetFirstWord @idlist OUTPUT ,@FirstWORD OUTPUT[/align]
[align=left] if @LENGTH > 0[/align]
[align=left] BEGIN[/align]
[align=left] SELECT @FIRSTID = CONVERT(INT,@FirstWORD)[/align]
[align=left] EXEC DeleteUserdatabyID @userid = @FIRSTID[/align]
[align=left] END[/align]
[align=left] END[/align]
RETURN 0
---------------------------------------------------------------------------------------------------------
2. 测试过程
在查询分析器中输入测试代码:
1. declare @tmp1 nvarchar(4000),@tmp2 nvarchar(4000),@rtn int
[align=left] set @tmp1 = 'a,b,cde'[/align]
[align=left] [/align]
[align=left] SELECT @rtn = DATALENGTH(@tmp1)[/align]
[align=left] while @rtn > 0[/align]
[align=left] begin[/align]
[align=left] exec @rtn = GetFirstWord @SourceString = @tmp1 output, @firstWord = @tmp2 output[/align]
[align=left] print(@tmp2)[/align]
[align=left] end[/align]
[align=left][/align]
2.
[align=left]exec DeleteUserdataByIdlist @idlist = '2,3,4,5,6' --同时删除多条记录[/align]
[align=left][/align]
[align=left]3. 输出结果 [/align]
[align=left]1. [/align]
[align=left] a[/align]
[align=left] b[/align]
cde
2.
删除了数据库中的记录
ALTER PROCEDURE dbo.GetFirstWord
[align=left] @SourceString NVARCHAR(4000) = NULL OUTPUT,[/align]
[align=left] @FirstWord NVARCHAR(4000) = NULL OUTPUT[/align]
[align=left]AS[/align]
[align=left] SET NOCOUNT ON[/align]
[align=left] DECLARE @Oldword NVARCHAR(4000)[/align]
[align=left] DECLARE @Length INT[/align]
[align=left] DECLARE @CommaLocation INT[/align]
[align=left] [/align]
[align=left] SELECT @Oldword = @SourceString[/align]
[align=left] IF NOT @Oldword IS NULL [/align]
[align=left] BEGIN[/align]
[align=left] --get the first seperate chara location[/align]
[align=left] SELECT @CommaLocation = CHARINDEX(',',@Oldword) [/align]
[align=left] --get the length[/align]
[align=left] SELECT @Length = DATALENGTH(@Oldword)[/align]
[align=left] --Do Not Find Seperate,There is last Word [/align]
[align=left] IF @CommaLocation = 0 [/align]
[align=left] BEGIN[/align]
[align=left] SELECT @FirstWord = @Oldword[/align]
[align=left] SELECT @SourceString = null[/align]
[align=left] RETURN @Length[/align]
[align=left] [/align]
[align=left] END[/align]
[align=left] -- get the first word[/align]
[align=left] SELECT @FirstWord = SUBSTRING(@Oldword,1,@CommaLocation-1)[/align]
[align=left] --trim the first word and separate[/align]
[align=left] SELECT @SourceString=SUBSTRING(@Oldword,@CommaLocation+1,@Length-@CommaLocation) [/align]
[align=left] [/align]
[align=left] RETURN @Length - @CommaLocation[/align]
[align=left] END[/align]
[align=left] ELSE[/align]
[align=left] SELECT @FirstWord = null[/align]
[align=left] SELECT @Length = 0[/align]
[align=left] RETURN 0[/align]
[align=left]------------------------------------------------[/align]
[align=left][/align]
[align=left]ALTER PROCEDURE dbo.DeleteUserdataByIdlist[/align]
[align=left] @idlist nvarchar(1000) [/align]
[align=left]AS[/align]
[align=left] SET NOCOUNT ON[/align]
[align=left] DECLARE @FirstWORD NVARCHAR(1000)[/align]
[align=left] DECLARE @FIRSTID int[/align]
[align=left] DECLARE @LENGTH int[/align]
[align=left] SET @LENGTH = DATALENGTH(@idlist)[/align]
[align=left] while @LENGTH > 0[/align]
[align=left] BEGIN[/align]
[align=left] EXEC @LENGTH = GetFirstWord @idlist OUTPUT ,@FirstWORD OUTPUT[/align]
[align=left] if @LENGTH > 0[/align]
[align=left] BEGIN[/align]
[align=left] SELECT @FIRSTID = CONVERT(INT,@FirstWORD)[/align]
[align=left] EXEC DeleteUserdatabyID @userid = @FIRSTID[/align]
[align=left] END[/align]
[align=left] END[/align]
RETURN 0
---------------------------------------------------------------------------------------------------------
2. 测试过程
在查询分析器中输入测试代码:
1. declare @tmp1 nvarchar(4000),@tmp2 nvarchar(4000),@rtn int
[align=left] set @tmp1 = 'a,b,cde'[/align]
[align=left] [/align]
[align=left] SELECT @rtn = DATALENGTH(@tmp1)[/align]
[align=left] while @rtn > 0[/align]
[align=left] begin[/align]
[align=left] exec @rtn = GetFirstWord @SourceString = @tmp1 output, @firstWord = @tmp2 output[/align]
[align=left] print(@tmp2)[/align]
[align=left] end[/align]
[align=left][/align]
2.
[align=left]exec DeleteUserdataByIdlist @idlist = '2,3,4,5,6' --同时删除多条记录[/align]
[align=left][/align]
[align=left]3. 输出结果 [/align]
[align=left]1. [/align]
[align=left] a[/align]
[align=left] b[/align]
cde
2.
删除了数据库中的记录
相关文章推荐
- 简单的存储过程分页,删除多条记录的存储过程,存储过程中调用存储过程
- 通过数据库事务删除记录的存储过程
- Oracle 通过存储过程删除两个表中符合条件的记录
- SQL存储过程通过传送数组字符串参数删除多条记录
- zabbix通过jmx监控tomcat, Nginx日志统计方案全过程,切割nginx和tomcat日志并删除指定天数前的日志记录
- 把多条记录转为一个字符串输出存储过程
- 通过java调用存储过程(查询,更新,修改,删除),包的一些操作
- 写存储过程时如何对传进去的参数进行字符串的匹配
- 通过SQL存储过程删除过期的数据库Bak备份文件或其它文件
- 通过存储过程进行分页查询的SQL示例
- 生成SQL语句字符串,通过存储过程执行
- 同时删除GridView中的N行所需的存储过程
- 存储过程实例2:通过把group by 放入循环,对生成的主键可以进行其他处理
- asp 如何同时提交多条记录进行保存?
- 把多条记录转为一个字符串输出存储过程
- 编写一个存储过程,根据学号、课程号 按成绩的20%进行加分,如果增加后的分数大于100,则取消加分。同时在存储过程中返回增加后的成绩。
- 如何删除一个表中重复的记录? 、、游标,存储过程的使用
- 通过SQL存储过程删除过期的数据库Bak备份文件或其它文件
- SQL存储过程测试(6)——当待测存储过程返回行集的时候 如何判断测试结果是否通过
- postgresql 写存储过程传入的参数为字符串('4,5,6,8,9,10')个数不确定时,如何一次性删除