将 varchar 值 'true' 转换为数据类型为 bit 的列时发生语法错误

时间:2021-12-14 14:53:21
   知道这是个老问题了,可是自己插的时候还是会报错,麻烦各位大神们指点下。。。

   问题:插入bit类型报错。

   实现功能,查询一个表内容插入另外一张表。


语句如下:
insert into UFDATA_333_2012.dbo.fitemss01class(cItemCcode,cItemCname,bItemCend,iItemCgrade)
select f1.cItemcode,f1.cItemname,1,1 from UFDATA_222_2012.dbo.fitemss00 f1 where 
f1.cItemcode not in (select cItemCcode from UFDATA_333_2012.dbo.fitemss01)


其中iItemCgrade为bit类型,直接插入是没有问题的。但是查询结果插入就报错。
如果按上面的sql语句执行会报:
将截断字符串或二进制数据。
语句已终止。



如果将1改为'true'会报
将 varchar 值 'true' 转换为数据类型为 tinyint 的列时发生语法错误。

同样将1改为convert(bit,1)会报
将截断字符串或二进制数据。
语句已终止。

6 个解决方案

#1


木有人么?求助。。。
就卡在这了。。。
对了,忘记说了,数据库是2000

#2


select f1.cItemcode,f1.cItemname 这两个字段中 有超长的数据 导致的。

#3


bit 类型的数据,里面只可以是1,0,NULL,还有看看数据长度有没有超

#4


引用 2 楼 lixzhong 的回复:
select f1.cItemcode,f1.cItemname 这两个字段中 有超长的数据 导致的。


神了,真有一个字段大小是20的哈。好厉害。不过我改了之后还是这样。

#5


你给的例子说明肯定不是bit类型的问题,像ls说的,应该是
f1.cItemcode,f1.cItemname这两个字段的长度引发的

#6


引用 5 楼 szm341 的回复:
你给的例子说明肯定不是bit类型的问题,像ls说的,应该是
f1.cItemcode,f1.cItemname这两个字段的长度引发的


insert into UFDATA_333_2012.dbo.fitemss01class(cItemCcode,cItemCname,iItemCgrade,bItemCend)
select f1.cItemcode,f1.cItemname,1,1 as z from UFDATA_222_2012.dbo.fitemss00 f1 where 
f1.cItemcode not in (select cItemCcode from UFDATA_333_2012.dbo.fitemss01)
这样又可以了、。

谢谢大家的回答,经您的提醒后我突然间发现了,我把问题和bit绑定了,只要报错我就认为是bit类型转换的问题。没有细细查看sqlServer提示的错误信息。
最后,再次谢谢大家的回答。祝大家生活愉快,事业顺心!

#1


木有人么?求助。。。
就卡在这了。。。
对了,忘记说了,数据库是2000

#2


select f1.cItemcode,f1.cItemname 这两个字段中 有超长的数据 导致的。

#3


bit 类型的数据,里面只可以是1,0,NULL,还有看看数据长度有没有超

#4


引用 2 楼 lixzhong 的回复:
select f1.cItemcode,f1.cItemname 这两个字段中 有超长的数据 导致的。


神了,真有一个字段大小是20的哈。好厉害。不过我改了之后还是这样。

#5


你给的例子说明肯定不是bit类型的问题,像ls说的,应该是
f1.cItemcode,f1.cItemname这两个字段的长度引发的

#6


引用 5 楼 szm341 的回复:
你给的例子说明肯定不是bit类型的问题,像ls说的,应该是
f1.cItemcode,f1.cItemname这两个字段的长度引发的


insert into UFDATA_333_2012.dbo.fitemss01class(cItemCcode,cItemCname,iItemCgrade,bItemCend)
select f1.cItemcode,f1.cItemname,1,1 as z from UFDATA_222_2012.dbo.fitemss00 f1 where 
f1.cItemcode not in (select cItemCcode from UFDATA_333_2012.dbo.fitemss01)
这样又可以了、。

谢谢大家的回答,经您的提醒后我突然间发现了,我把问题和bit绑定了,只要报错我就认为是bit类型转换的问题。没有细细查看sqlServer提示的错误信息。
最后,再次谢谢大家的回答。祝大家生活愉快,事业顺心!