您的位置:首页 > 其它

通过存储过程进行字符串分拆,在同时删除多条记录的时候有用。

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.
删除了数据库中的记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐