我想把长度大于8000的字符串插入到类型为text的临时表变量中,为何执行以下代码查询出来为空declare @retTb table(retTxt text)
declare @i int 
declare @str1 varchar(8000)
declare @str2 varchar(8000)
set @str1 = ''
set @str2 = ''
set @i =1
while  @i <= 8000
begin
   set @str1 = @str1 + 'a' 
   set @str2 = @str2 + 'b'
   set @i = @i + 1
end
insert into @retTb select @str1+@str2select substring(retTxt,8001,10) from @retTb

解决方案 »

  1.   

    declare @retTb table(retTxt text)
    declare @i int 
    declare @str1 varchar(max)
    declare @str2 varchar(max)
    set @str1 = ''
    set @str2 = ''
    set @i =1
    while  @i <= 8000
    begin
       set @str1 = @str1 + 'a' 
       set @str2 = @str2 + 'b'
       set @i = @i + 1
    end
    insert into @retTb select cast(@str1+@str2 as varchar(max))
    select substring(retTxt,8001,10) from @retTb
      

  2.   


    select len(cast(retTxt as varchar(max))) as t from @retTb
    --结果为
    8000
    --所以你截取字符串为空
      

  3.   

    declare @retTb table(retTxt text)
    declare @i int 
    declare @str1 varchar(max)
    declare @str2 varchar(max)
    set @str1 = ''
    set @str2 = ''
    set @i =1
    while  @i <= 8000
    begin
       set @str1 = @str1 + 'a' 
       set @str2 = @str2 + 'b'
       set @i = @i + 1
    end
    insert into @retTb select @str1+@str2
    select substring(retTxt,8001,10) from @retTb
      

  4.   

    我是sql2000, declare @str1 varchar(max)不行啊
      

  5.   

    create table tb(t varchar(10))
    insert into tb values('0123456789')
    select substring(t,8000,1) from tb
    也是空