关于在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)> 0
set @RetVal=left(@RetVal,len(RetVal)-1)
return @RetVal
end
go
[解决办法]
改正下:
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-1)
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
或者你原来的只改一个地方
Where DictValue = substring(@Value1,0,@myPos)
--〉
Where DictValue = substring(@Value1,1,@myPos-1)
[解决办法]
where charindex( ', '+列名+ ', ', ', '+@value+ ', ')> 0
[解决办法]
在用户定义函数中不支持使用EXEC()执行动态SQL语句,但是没有关系,可以用charindex解决楼主遇到的问题。
[解决办法]
只需要用charindex()就可以解決了