我写了个储存过程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.   

     @fItemTypeNumber  = '''01'',''02'''即可
      

  2.   

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

  3.   

    二楼的方法不错不过有没有不用自定义函数的方法输入的时候 直接 变化数值  ''01','02''传递后 得到  @fItemTypeNumber = '''01'',''02'''但是这样依然查询不到
      

  4.   

    为什么 and substring(Number,1,2) In (Replace(@fItemTypeNumber,',',''',''')) 这样不管用呢?
      

  5.   


    可这样实现
    @fItemTypeNumber='01,02' ','+@fItemTypeNumber+',' like ',%'+substring(Number,1,2)+',%' 
      

  6.   

    这样传参也可用charindex/patindex