SQL Server 字符串分割 自定义函数 以及执行方式

在数据库新建查询中执行以下代码:


 

CREATE   function   [dbo].[SplitStr]

(

@SourceSql   varchar(200),  @StrSeprate   varchar(5))/*此处变量类型可更改为 nvarchar  以便接收中文参数*/

 returns @temptable(F1  varchar(100) )

as

begin

declare @ch as varchar(100)

set   @SourceSql=@SourceSql+@StrSeprate

 while(@SourceSql<>'')

begin

set   @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)

insert   @temp   values(@ch)

set   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')

end

return

end

 


简单查询执行方式:

SELECT F1 FROM dbo.SplitStr(@StatusList,',')

联合查询执行方式:

Declare @StatusList Nvarchar(500)

SELECT [表1].*FROM 表1 WHERE  [表1].[列1] IN (SELECT F1 FROM dbo.SplitStr(@StatusList,','))

游标查询执行方式:

declare cursor_insert cursor for SELECT F1  FROM  dbo.SplitStr(@StatusList,',')/*定义游标(红色代码为自定义分割函数简单查询执行方式)*/

declare @i nvarchar(20) /*定义游标遍历时接收数据的参数*/

open cursor_insert /*打开定义的游标*/

fetch cursor_insert   into   @i /*游标会逐行拿到查询语句所返回的列集合*/
while @@fetch_status=0 /*循环条件:执行到结尾前是否出现问题*/

/*Fetch_Status函数值:

0 FETCH 语句成功。

-1 FETCH 语句失败或此行不在结果集中。

-2 被提取的行不存在。*/

begin

--print @i/*可以打印拿到的列值*/

fetch   cursor_insert   into   @i /*抓取下一条列值存入变量*/

end

close cursor_insert /*关闭当前游标*/

deallocate cursor_insert/*删除游标与游标名称或游标变量之间的关联。如果一个名称或变量是最后引用游标的名称或变量,则将释放游标,游标使用的任何资源也随之释放。*/

 

 

posted on 2012-01-15 14:51  anniky  阅读(500)  评论(0编辑  收藏  举报