declare  @s     nVarchar(max)
set @s='……'
execute sp_executesql @s
@s的长度大概是9000,已经定义为 nVarchar(max)了,但是实际的结果还是被截取为4000了.
有什么解决办法吗?sqlserver变量长度

解决方案 »

  1.   


    那如果我执行的是一句完整的SQL呢,比如 insert into table1 (column1,column2……)
    select column1,column2…… from table2如果insert 和select 拆到2个变量里,那最后怎么去execute啊
      

  2.   


    试了一下
    set @s1='insert into table1 (column1,column2……)'
    set @s2='select column1,column2…… from table2'
    set @s=@s1+@s2
    再去执行@s居然就不超长了,实在是奇怪
      

  3.   

    Don't use variable, try this,  exec('[TSQL Code]')
      

  4.   

    看了我很久才发现你问的是nvarchar(max)里面的max,我还以为是max()呢。
    下面是联机丛书的解释:nvarchar [ ( n | max ) ]
    可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 ISO 同义词为 national char varying 和 national character varying。
    注意两个地方:字符和字节。nvarchar(max)的存储可以是2G,这是容量,而不是长度。
      

  5.   

    二进制可能会达到,但是没试过,CLR类型也可能会达到
      

  6.   

    我也想到二进制了,不过二进制不能存储在varchar类型中啊,而且已经有了varbinary类型了啊,难道如果想存储2G的数据还是要用回text吗?
      

  7.   

    那为什么max类型的字符拼接的话就可以存储超过8000的长度了呢~