日期:2014-05-17  浏览次数:20440 次

这种SQL语句这么写?
动态选择的一组字符串
如:字符串=‘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 ON
GO
SET QUOTED_IDENTIFIER ON
GO



CREATE   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