数据库表的结构是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里面处理