动态选择的一组字符串
如:字符串=‘a,b,c'
需要查出表中栏目列中等于这些字符串号的记录
表A
序号 栏目
1 a
2 b
3 c
4 d
5 e
6 f
显示结果:
序号 栏目
1 a
2 b
3 c
------解决方案--------------------
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
end
2.然后
select * from A where 栏目 in (select * from f_SplitToNvarchar('a,b,c',',')
------解决方案--------------------
查询用到的函数 f_split
- SQL code
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE 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