读书人

储存过程 Where IN 怎么传递值

发布时间: 2012-10-26 10:30:59 作者: rapoo

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

读书人网 >SQL Server

热点推荐