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

被MSSQL耍了
1.建表,报警告,行最大大小超过8060,INSERT和UPDATE可能失败

2.插入数据,报超过8060,插入失败

3.用ALTER TABLE ALTER COLUMN COL_NAME VARCHAR(MAX)把所有字符串列全改成VARCHAR(MAX),其它列长度加起来共320

4.插入数据,报超过8060,插入失败


就这样,被华丽丽的刷了,虽然现在已经解决了,但还是郁闷。


第一个详细解释原因的给250技术分,谨以此分献给MS

------解决方案--------------------
只对于2005 或者以上版本

1、警告是因为有char列存在,因为char 是定长的,所以他会去计算,varchar 是非定长的只要实际存储的数据没有超过这个上限, 就不会有问题,别且这个8060 不会去考虑varchar,搞成0来统计
SQL code
create table test1
(
    a varchar(1000),
    b char(8000),
    c char(53),
    d varchar(1000)
);
go
--这个只会警告
--但是下面的就会报错
create table test2
(
    a int,
    b char(8000),
    c char(53),
    d varchar(1000)
);
go