储存过程 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,','))