首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

数据库表的结构是varchar(8000),小弟我插入的字符串是7742个长度,就报错,怎么处理

2012-01-23 
数据库表的结构是varchar(8000),我插入的字符串是7742个长度,就报错,怎么办啊服务器:消息8152,级别16,状态

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

热点排行