日期:2014-05-18  浏览次数:20533 次

关于在SQL SERVER的用户函数中做IN操作
需求如下:有一个函数中的有一个查询条件是需要做in操作的,条件通过参数传进来,例如传进的条件为: 'aa,bb,cc,dd,ee,ff '
    需要通过in操作来进行查询,偶试了N种方法,都没成功.最后只好先把传进来的条件拆分,然后再循环查询处理.(特别说明:不希望建临时表处理),现在的处理方式如下:

CREATE   function   GetSimpleDic(@Value   varchar(1000))
returns   varchar(8000)
as
begin
                          declare   @tmpStr   varchar(300)
declare   @Value1   varchar(1200)
declare   @RetVal   varchar(8000)
set   @RetVal= ' '
Set   @Value1=@Value
declare   @myPos   int
set   @myPos=charindex( ', ',@Value1)
while   @myPos> 0
begin
set   @tmpStr= ' '

select   @tmpStr=DictCode   from   SecSimpleDict  
Where     DictValue   =   substring(@Value1,0,@myPos)
                                                      set   @RetVal=@RetVal+isnull(@tmpStr, ' ')+ '; '
                                                      set   @Value1=substring(@Value1,@myPos+1,len(@Value1)-@myPos)
set   @myPos=charindex( ', ',@Value1)
end
set   @tmpStr= ' '
                          select   @tmpStr=DictCode   from   SecSimpleDict  
where   DictValue=@Value1
                          set   @RetVal=@RetVal+isnull(@tmpStr, ' ')
                      return   @RetVal
end


100分求哪位高手做成直接使用in查询的函数........

------解决方案--------------------

CREATE function GetSimpleDic(@Value varchar(1000))
returns varchar(8000)
as
begin
declare @tmpStr varchar(300)
declare @Value1 varchar(1200)
declare @RetVal varchar(8000)
set @RetVal= ' '
Set @Value1=@Value
declare @myPos int
set @myPos=charindex( ', ',@Value1)
while @myPos> 0
begin
set @tmpStr= ' '

select @tmpStr=DictCode from SecSimpleDict
Where DictValue = left(@Value1,@myPos)
set @RetVal=@RetVal+isnull(@tmpStr, ' ')+ '; '
set @Value1=stuff(@Value1,1,@myPos+1, ' ')
set @myPos=charindex( ', ',@Value1)
end
set @tmpStr= ' '
select @tmpStr=DictCode from SecSimpleDict
where DictValue=@Value1
set @RetVal=@RetVal+isnull(@tmpStr, ' ')
return @RetVal
end


------解决方案--------------------
CREATE function GetSimpleDic(@Value varchar(1000))
returns varchar(8000)
as
begin
declare @RetVal varchar(8000)
set @RetVal= ' '
set @Value = ', '+@Value+ ', '

select
@RetVal=@RetVal+isnull(DictCode, ' ')+ '; '
from
SecSimpleDict
where
charindex( ', '+rtrim(DictValue)+ ', ',@Value)>