我现在一个字符是动态变化的,可能超过8000
我现在不能用varchar类型,但是用Text类型好像不能动态运算
我该怎么办

解决方案 »

  1.   

    用几个varchar(8000)的变量来分开处理
      

  2.   

    /*--化解字符串不能超过8000的方法经常有人提到,用动态生成SQL语句的方法处理数据时,处理语句超长,无法处理的问题
    下面就讨论这个问题:
    --邹建 2003.9(引用请保留此信息)--*/
    --方法1. 多个变量处理--根据查询结果定义变量(实际处理中,应该是估计需要多少个变量,定义足够多的变量个数,多定义变量并不影响处理,下面就多定义了一个)
    --生成数据处理临时表
    SELECT id=IDENTITY(int,0,1),
    g=0,
    a=CAST(N','+QUOTENAME([name])
    +N'=SUM(CASE [name] WHEN N'+QUOTENAME(name,N'''')
    +N' THEN [colid] ELSE 0 END)'
    as nvarchar(4000))
    INTO # FROM syscolumns
    WHERE name>N''
    GROUP BY name--分组临时表
    UPDATE a SET G=id/i
    FROM # a,(SELECT i=3800/MAX(LEN(a)) FROM #)b
    SELECT MAX(g)+1 as N'需要的变量个数' FROM #DECLARE @0 nvarchar(4000),@1 nvarchar(4000),@2 nvarchar(4000),@3 nvarchar(4000),@4 nvarchar(4000)
    SELECT @0=N'',@1=N'',@2=N'',@3=N'',@4=N''
    SELECT 
    @0=CASE g WHEN 0 THEN @0+a ELSE @0 END,
    @1=CASE g WHEN 1 THEN @1+a ELSE @1 END,
    @2=CASE g WHEN 2 THEN @2+a ELSE @2 END,
    @3=CASE g WHEN 3 THEN @3+a ELSE @3 END,
    @4=CASE g WHEN 4 THEN @4+a ELSE @4 END
    FROM #
    EXEC(N'SELECT xtype'+@0+@1+@2+@3+@4+N' FROM syscolumns GROUP BY xtype')
    DROP TABLE #/*--方法说明优点:比较灵活,数据量大时只需要增加变量就行了.不用改动其他部分
    缺点:要自行估计处理的数据,估计不足就会出错
    --*/
      

  3.   

    2000中只能用几个varchar(8000)拼接了,2005中用varchar(MAX)解决此问题