在数据库新建查询中执行以下代码:
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/*删除游标与游标名称或游标变量之间的关联。如果一个名称或变量是最后引用游标的名称或变量,则将释放游标,游标使用的任何资源也随之释放。*/