本帖最后由 W9757 于 2012-01-12 20:32:40 编辑

解决方案 »

  1.   

    --set @qbppf='''042-24105-008-0101A'',''042-28054-009-0101A'''
      

  2.   

    ProcedureName:='pu_oidsc1;1';储存过程
    CREATE PROCEDURE pu_oidsc1(

    ('''+@qbppf+''')
      

  3.   

    问题找到了,qbppf的长度长了,有25820之多.我用的是SQL2000,qbppf的长度是不确定的,有时会超过8000有时不会,那位有办法.
      

  4.   

    搞这么多distinct,你到底要干嘛的
      

  5.   

    程序中qbppf如果超过8000,比如是22000吧,那你可以存储过程里定义5个varchar(8000),这样上限是5*8000=40000了
    在程序中判断qbppf有多少个字符,然后分给那5个参数,具体怎么分你应该懂写吧,这里因为你的存储过程是from参数的,所以分的时候还要注意,不是一定要分8000个,这样查出来的结果肯定不对,因为有逗号嘛,比如分到7998的时候有逗号了,那么就截断了,留到下个参数,大概意思就这样了,最后我们给 5个参数赋值的时候是前面3个参数有有字符,后面2个为空好了,现在到存储过程这边
    存储过程中定义一个结果表
    判断参数1字符串是否为空
    先查参数1的记录集insert into 结果表
    判断参数2字符串是否为空 insert into 结果表
    //以此判断后面参数是否为空
    ......
    ......
    ......
    //
    最后select 结果表
    ok,结贴吧