ms_sql错误:ODBC错误代码(22001)将截断字符串或二进制数据。

youxikaifa113 2011-11-03 06:37:57
很奇怪的一个问题:
不知道为啥我以前旧的版本都没错,
旧表结构如下:
CREATE TABLE [Table1](
id int not null identity (1, 1),
name char(128) not null primary key,
text char(255) null);

CREATE TABLE [Table2](
id int not null identity (1, 1),
name char(128) not null primary key,
text char(255) null);

修改后如下:
CREATE TABLE [Table1](
id int not null identity (1, 1) primary key,
name char(128) not null ,
text char(255) null);
CREATE UNIQUE INDEX UQ_NAME_INDEX ON [Table1](name);

CREATE TABLE [Table2](
id int not null identity (1, 1) primary key,
name char(128) not null ,
text char(255) null);
CREATE UNIQUE INDEX UQ_NAME_INDEX ON [Table1](name);


用旧表结构的时候,做拷贝的时候不会报错:
Table1数据:1,'nn',NULL
我先执行:SET IDENTITY_INSERT [Table2] ON
后将Table1拷贝到Table2可以拷贝过去

但是当我用新的表结构时就错误,这是为啥呐,照理来说如果是text字段为NULL导致insert时被截断,但是旧表结构为啥可以。

还有就是这个NULL值具体要怎么处理,插入时怎么才能知道Table1中的text字段是不是NULL,调试跟踪下,NULL并非''值,而是'烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫皞'
谁告诉我下这个具体要怎么处理,拷贝过去我要保持原表数据:1,'nn',NULL,而不是1,'nn',''
...全文
871 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-04
  • 打赏
  • 举报
回复


insert Table1(。。。。。)
select 1,'nn',cast( 字符串 as varchar(8000))--這樣新增試試
youxikaifa113 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 herowang 的回复:]
确定表1中的text字段都是NULL?
[/Quote]

恩,我表1中只有一条记录,就是1,'nn',NULL

不知道怎么才能判断数据库中莫条记录的莫个字段是NULL呢?
我试过把text字段随便改成'11'什么的就没有报被截断了。。。
youxikaifa113 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 roy_88 的回复:]
在SQL2005環境測過沒有問題
[/Quote]

我是用sql2000的,就是会提示被截断,然后插入就失败了。
  • 打赏
  • 举报
回复
确定表1中的text字段都是NULL?
中国风 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 youxikaifa113 的回复:]

引用楼主 roy_88 的回复:
有什麼問題?
測了一下沒發現什麼問題,都可以新增值也相同 134個字符


你可以试试看,调用SET IDENTITY_INSERT [Table2] ON后插入数据1,'nn','烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫……
[/Quote]

在SQL2005環境測過沒有問題
youxikaifa113 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ssp2009 的回复:]
字符串长度不够啊
[/Quote]
我知道因为text char(255)不够,但是我从Table1中select*后它就是这个值了,应该是因为table1中的text字段是NULL值的原因,所以我想问问看,如何才能判断一个字段的值为NULL,这样我也可以相应的在插入的时候就把值=NULL。
我不希望修改table1原表中的数据,就是希望它还是原来的1,'nn',NULL,而不是1,'nn',''。
youxikaifa113 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 roy_88 的回复:]
有什麼問題?
測了一下沒發現什麼問題,都可以新增值也相同 134個字符
[/Quote]

你可以试试看,调用SET IDENTITY_INSERT [Table2] ON后插入数据1,'nn','烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫皞'
绝对text字段会被截断的
youxikaifa113 2011-11-04
  • 打赏
  • 举报
回复
问题解决了,感谢大家的回答
pengxuan 2011-11-03
  • 打赏
  • 举报
回复
没看出来,新旧表的结构是一样的,字段长度也是一样的
快溜 2011-11-03
  • 打赏
  • 举报
回复
字符串长度不够啊
--小F-- 2011-11-03
  • 打赏
  • 举报
回复
TABLE2里面的字段长度不够么?
--小F-- 2011-11-03
  • 打赏
  • 举报
回复
Table2中字符串长度定义不够?
中国风 2011-11-03
  • 打赏
  • 举报
回复
有什麼問題?
測了一下沒發現什麼問題,都可以新增值也相同 134個字符

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧