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

请教往一个表逐列插入的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