我在delphi中调用储存过程B,传入参数aa,bb,cc储存过程中的有参数@Para是接收传入的字符(ac,bb,cc)
Select * from Table Where in (@Para)但是却读不到数据如果传入一个字符aa,就没有问题。
我知道可能是字符的格式问题,但是试了半天,都还是不行,请求帮忙。
Select * from Table Where in (@Para)但是却读不到数据如果传入一个字符aa,就没有问题。
我知道可能是字符的格式问题,但是试了半天,都还是不行,请求帮忙。
where col in (@Para):
@Para作为字符串参数传递进来根本就是一个字符串,而并不是楼主所期望的三个字符串:
'ac','bb','cc'
where col in (@Para)就相当于where col in ('ac,bb,cc')
而不是where col in ('ac','bb','cc').
所以,请楼主参考
http://community.csdn.net/Expert/topic/4881/4881050.xml?temp=.511471
那里已经给出解决方案了,只能动态.
楼主的要求用下面的方面可以实现CREATE function udf_splitstring(@str varchar(8000),@spli varchar(10))
returns @stringtab table(strs varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @stringtab
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str<>'' insert into @stringtab values(@str)
return
end
Select * from Table Where 字段 in (select strs from dbo.udf_splitstring('aa,bb,cc',','))
(
id int,
col varchar(2)
)
insert into @test
select 1,'aa' union all
select 2,'bb' union all
select 3,'cc' union all
select 4,'dd' union all
select 5,'ee'declare @para varchar(100)
select @para='aa,bb,cc'select * from @test where charindex(','+col+',',','+@Para+',')>0
/*
id col
----------- ----
1 aa
2 bb
3 cc完全没有必要把问题复杂化嘛
*/
Select * from tab Where charindex(','''+col+''',',','++@Para+',') > 0
是这样的:我的假设是楼主在存储过程中传递的参数仍然是按照in的处理方式时的情况,即:
col in(@Para) (相当于col in('aa','bb','cc'))
楼主在调用存储过程时就要:
exec sptest '''aa'',''bb'',''cc'''
所以在使用charindex()变通时就要在col前后再加单引号才能完全匹配.
也就是说我们解决问题的出发点是不一样的,我仍然假设楼主继续按'''aa'',''bb'',''cc'''传递参数.
如果楼主按你所提供的方法就简单多了,传递'aa,bb,cc'就行了.
^^
当字段值为
a,b,c
a,d,e
a,c,d传入值为 a,b,c,d这时可以使用分解作用的函数
in(以逗号分隔的表达式列表)而楼主的
in(@Para)
@Para 只是表达式列表中的一个表达式, 而不是一个表达式列表.