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

储存过程 Where IN 如何传递值
我写了个储存过程

CREATE proc sProduct

@BeginDate datetime,
@EndDate datetime,
@fItemTypeNumber varchar(250)

在这执行的时候 我用了一个 Where In 语句

and substring(Number,1,2) In (@fItemTypeNumber)

Number 字段的值 是 01.0001 02.0001 03.0001
这样的 所以我用 substring 只过滤 02 

@fItemTypeNumber 传递过来的值是 01,02 但是搜索不出来

我直接写入数值可以查询出来 
and substring(Number,1,2) In ('01','02')

网上有说 and substring(Number,1,2) In ('+@fItemTypeNumber+') 这样 我试了 也不行

请问 应该怎么弄啊?

------解决方案--------------------
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.然后 
and substring(Number,1,2) In (select * from f_SplitToNvarchar(@fItemTypeNumber,','))