日期:2014-05-17  浏览次数:20892 次

将 varchar 值 'true' 转换为数据类型为 bit 的列时发生语法错误
本帖最后由 darkstwu 于 2013-01-11 14:03:45 编辑
   知道这是个老问题了,可是自己插的时候还是会报错,麻烦各位大神们指点下。。。

   问题:插入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)会报
将截断字符串或二进制数据。
语句已终止。


------解决方案--------------------
select f1.cItemcode,f1.cItemname 这两个字段中 有超长的数据 导致的。
------解决方案--------------------
bit 类型的数据,里面只可以是1,0,NULL,还有看看数据长度有没有超
------解决方案--------------------
你给的例子说明肯定不是bit类型的问题,像ls说的,应该是
f1.cItemcode,f1.cItemname这两个字段的长度引发的