日期:2014-05-18  浏览次数:20694 次

数据库表的结构是varchar(8000),我插入的字符串是7742个长度,就报错,怎么办啊
服务器:   消息   8152,级别   16,状态   10,行   1
将截断字符串或二进制数据。
语句已终止。


--------------
是不是要把字段定义成text啊,如果是,那insert   语句要如何写啊?

------解决方案--------------------
把表结构定义成nvarchar(8000)试试
------解决方案--------------------
字段定义成 Ntext insert 语句不变
------解决方案--------------------
定义成text或ntext试试
------解决方案--------------------
表的一条记录只能存储8K
所以, 即使你定义了列为: varchar(8000)
也必须保证, 你插入的记录的所有列加起来没有超过8K, 否则就会出现截断的现象

-- 简单的说, 下面的会出问题
DECLARE @t TABLE(col1 char(1000), col2 varchar(8000))

INSERT @t SELECT ' ', REPLICATE( 'a ', 8000)
------解决方案--------------------
如果你用的是sql 2005, 则不会出现此问题, sql 2005允许一条记录跨数据页
------解决方案--------------------
學習,以为改为ntext就可以了。
------解决方案--------------------
text/ntext操作用updatetext, readtext这类的操作. 或者程序中去处理吧.

当然, 你可以考虑把varchar(8000)的列放在一个单独的表中, 通过主键关联. 或者是升级到sql 2005

不过, 似乎这些都不是好的解决方法.
------解决方案--------------------
插入的字符串是7742个长度?
你怎么计算的?
用select datalength(字段名)看看实际长度,可能已经到8000了。。。
------解决方案--------------------
纠正:nvarchar(8000)不可能是8000,最多是4000


楼主可以定义成text或ntext,insert不变,如果要执行substring之类的操作就像老大说的放到程序中去处理效果会更好,不要在sql里面处理