解决方案 »

  1.   

    写多个sql参数,到存储过程里面再拼接起来.不过sql里面定义的长度也是有限止的.
      

  2.   

    也可以这么理解吧,就传一个SQL语句过来,然后执行。但是这个语句比较长的。可以这么模拟:
    select 字段1,字段2,... from table where araeID in (1,2,3,4,...(这里多写些数字))
    那么这个语句就会吵过4000,甚至更多。
    赋值给参数。然后执行。
    我现在想怎么样才能传更多的字符给参数,然后能执行呢? 
      

  3.   

    我以前公司的做法:
    1、创建一个表值函数
    2、用表值函数把1,2,3,4,...(这里多写些数字)转换成一个表
    3、where那里in这个表值函数转换出来的表,或者直接在from中join
      

  4.   

    比如某表是保存所有用户ID的,然后属于某个机构。
    查询时候,可以选择机构,然后再选择机构下的某个用户。
    如果用户选择基本全部用户。那么语句是这么写
    select * from table where CustomeID in (选中的ID)  --这里ID很多,然后就会越界
    大家有没有特别好的方法处理啊!因为这个原因,所以SQL 语句就会超过4000,甚至更大
      

  5.   

    你的意思是,我选择ID时,首先插入在一个临时表。
    然后在 join 表。这个插入也很花时间啊!
      

  6.   


    select a.* from TABLE a LEFT joni (选中的ID) b ON a.id=b.id
    WHERE b.id IS NOT null
      

  7.   


    改成varchar(8000)试试呢,会报错吗
      

  8.   


    如果是sql server 2005及以后的版本,可以改成:varchar(max) 这个最多支持2G个字节,肯定能满足你的要求的
      

  9.   

    能不能说的清楚点:
    select a.* from TABLE a LEFT join (1,2,3) b ON a.id=b.id
    WHERE b.id IS NOT null
    如何得到b.id出来的。还有选中的ID,也可能会上万个啊!当然上万是极端的选择。也有可能而已
    用表值函数,也要在表里确定哪些是用户选中的ID啊。他不是选全部,如果全部,当然可以当作一个表关联来查询了。就好像所有ID 在 表A(1,2,3,4) 其实用户只选择了。1,3,4
    查询是,不就是这么写:select * from A where id in (1,3,4)
    可是万一表更多ID,选中的也更多呢。这样语句就很长了!
      

  10.   

    感谢yupeigu,测试过,确实能执行超过4000以上的SQL语句。
    我也知道这个很影响性能。不知道还有没有更好的方法?
      

  11.   

    据我测试,join的方法比in的高很多倍
      

  12.   

    create procedure pageQuery(
       @ExeSQL Nvarchar(max)  --传递过来的SQL语句,然后执行。这个只是举例
    ) as 
    begin
         exec @ExeSQL
    end
      

  13.   

    varchar(max) 或者text类型