1.先写个表值函数 create function [dbo].[f_SplitToNvarchar] ( @SourceSql nvarchar(max),--源分隔字符串 @StrSeprate varchar(10)--分隔符 ) returns @temp table(a nvarchar(max)) as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'\' insert @temp values(@SourceSql) return end2.然后 select * from A where 栏目 in (select * from f_SplitToNvarchar('a,b,c',',')
select * from A where 栏目 in (select * from f_SplitToNvarchar('a,b,c',','))
查询用到的函数 f_splitSET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GOCREATE function [dbo].[f_split](@c varchar(5000),@split varchar(2)) returns @t table(col varchar(5000)) as begin declare @tmpstr varchar declare @index int set @index=1; while(charindex(@split,@c,@index)<>0) begin set @tmpstr=substring(@c,charindex(@split,@c,@index),charindex(@split,@c,@index)) if(ascii(@tmpstr)<>163) begin insert @t(col) values (substring(@c,1,charindex(@split,@c,@index)-1)) set @c = stuff(@c,1,charindex(@split,@c,@index),'') set @index=1 end else begin set @index=(charindex(@split,@c,@index)+1) end end insert @t(col) values (@c) return end 查询语句 declare @str nvarchar(100) set @str='a,b,c' select * from A where 栏目 in (select * from f_split(@str,','))
create function [dbo].[f_SplitToNvarchar]
(
@SourceSql nvarchar(max),--源分隔字符串
@StrSeprate varchar(10)--分隔符
)
returns @temp table(a nvarchar(max))
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end2.然后
select * from A where 栏目 in (select * from f_SplitToNvarchar('a,b,c',',')
第 3 行: 'max' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 10
必须声明变量 '@SourceSql'。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 11
必须声明变量 '@StrSeprate'。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 14
必须声明变量 '@temp'。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 15
必须声明变量 '@SourceSql'。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 16
必须声明变量 '@StrSeprate'。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 18
必须声明变量 '@SourceSql'。
服务器: 消息 137,级别 15,状态 1,过程 f_SplitToNvarchar,行 19
必须声明变量 '@temp'。
GO
SET QUOTED_IDENTIFIER ON
GOCREATE function [dbo].[f_split](@c varchar(5000),@split varchar(2))
returns @t table(col varchar(5000))
as
begin
declare @tmpstr varchar
declare @index int
set @index=1;
while(charindex(@split,@c,@index)<>0)
begin
set @tmpstr=substring(@c,charindex(@split,@c,@index),charindex(@split,@c,@index))
if(ascii(@tmpstr)<>163)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c,@index)-1))
set @c = stuff(@c,1,charindex(@split,@c,@index),'')
set @index=1
end
else
begin
set @index=(charindex(@split,@c,@index)+1)
end
end
insert @t(col) values (@c)
return
end 查询语句
declare @str nvarchar(100)
set @str='a,b,c'
select * from A where 栏目 in (select * from f_split(@str,','))