您的位置:首页 > 数据库

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

2012-01-15 14:51 357 查看
在数据库新建查询中执行以下代码:

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/*删除游标与游标名称或游标变量之间的关联。如果一个名称或变量是最后引用游标的名称或变量,则将释放游标,游标使用的任何资源也随之释放。*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: