对varchar,就是8000
nvarchar记得好像是4000
大于8000只能用text了。

解决方案 »

  1.   

    SQL Server按页存贮数据,而规定一页大小为8K,单行不能跨页,所以单行最大数据量为8K,然后还要去掉行首呀什么的,就只有8000了,所以Varchar只好8000大了。
    SQL对特大数据类型TEXT,IMAGE进行了另行存贮规则,可以存贮0-2G甚至更大到2的30次方大。
      

  2.   

    最后一句写错了,是2G最大,呵呵,1G=2E30
      

  3.   

    我把类型定义为text,大小自动变为16,而且不能更改,是怎么一回事吖?
      

  4.   

    text的大小到底是多少啊?请高手指点。
      

  5.   

    text服务器代码页中的可变长度非 Unicode 数据的最大长度为 2的31次-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。
      

  6.   

    text的长度是16,怎么解释啊?
      

  7.   

    text的长度为16,并不代表它只能保存16个字节。它保存的应该是文件的存放地址。
      

  8.   

    如果要在MS SQL Server 7.0 上存储>8000的字符串,应该使用TEXT数据类型。
    就我的经验,对于TEXT 类型的存储处理还是有一些值得注意的问题的。我觉得用存储过程总是很好的办法,业务逻辑清晰,维护方便,执行效率也很高。对于含有text 类型的表,我一般都写两个相应的存储过程(2 for modifying,2 for adding),
    也就是如果添加或修改的内容<8000,按通常处理,否则特殊处理。
    假定:有表[myBase].dbo.myTable iid int,ctitle varchar(200),ccontent text参考如下存储过程示例代码:
    ----for content<=8000------------------
    CREATE PROCEDURE [cp_mytable_add]
    @iid      int,
    @ctitle  varchar(200),
    @ccontent varchar(8000)
     AS
    INSERT INTO myTable VALUES(@iid,@ctitle,@ccontent)
    ---end-----------------------for content>8000------------------
    CREATE PROCEDURE [cp_mytable_add_text]
    @iid      int,
    @ctitle  varchar(200),
    @ccontent text
     AS
    INSERT INTO myTable VALUES(@iid,@ctitle,'')DECLARE @ptrval varbinary(16)
    EXECUTE sp_dboption 'myBase','select into/bulkcopy','true'
    SELECT @ptrval=TEXTPTR(ccontent) FROM myBase.dbo.myTable
    WHERE iid=@iid
    WRITETEXT myBase.dbo.myTable.ccontent @ptrval @ccontent
    EXECUTE sp_dboption 'myBase','select into/bulkcopy','false'
    ---end-------------------说明:
    1、修改的存储过程也差不多
    2、实际上,iid通常不是作为参数传递的,处理的办法很多,这里为了说明简洁,用参数。
    3、与数据库的接口程序判断该调用哪个存储过程。各位高手有什么好的处理办法,请交流,共同提高。