请教往一个表逐列插入的SQL语句
我最近在做数据导入导出时遇到一个问题,有两个数据库A和B,里面都有一张表名为C的表,表里面原来字段大部分一致,少部分长度或者精度不一致,但不一致的字段里面没有实际数据,只是默认值为( ' '),我把两个表里面的字段属性修改一致,包括字段名,数据类型,长度,精度.
现在需要把A里面C表的数据insert到B里面的C表中(此时B的C表中无数据)
在前天的时候出现以下错误:
将数据类型 numeric 转换为 varchar 时发生算术溢出错误
后来我还原了数据库重新进行了操作,并且逐个逐个对应检查了两个表中的字段属性,没有发现不一致的,也用SQL检索了系统表,没有找出不一致的字段.但是发生如下错误:
将数据类型 varchar 转换为 numeric 时出错
同样是两个数据库没有变,表也没有进行更改,为什么会两次不同的错误呢.
我现在想检查是哪个字段在insert的时候出错了,请问下有什么方法可以调试吗?
我想到一个办法,比如表C只有3个字段,那么我可以用以下语句来测试哪个字段出问题
insert into B.dbo.C
select a,null as b,null as c from A.dbo.C
但是如果表C的字段太多,那么上面那个方法是不可行的,有没有一个简单的办法,在插入的时候类似于我上面的操作,但是不需要测试的字段可以都赋值为null而不需要一个个写
------解决方案--------------------declare @e varchar(8000)
select @e= ' '
select @e = @e+ 'case when isnumeric([ '+name+ '])=1 then [ '+name+ '] else null end , '
from syscolumns where id=object_id( 'table ')
if len(@e) > 0
select @e=substring(@e,1,len(@e)-1)
print @e