oracle数据转入到sqlserver的一次记录

首先把oracle的数据查询出来,数据比较多的话需要分页,plsql查询超过12W条就会卡主,所以本次使用分页查询,每次查询10W条,

 然后将数据复制到excel当中。

SELECT /*+ FIRST_ROWS */ * FROM   
(  
SELECT A.*, ROWNUM RN   
FROM (
select a.houseno,b.lmapno from sep a left join
tosep b on a.sepid=b.sepid 
) A   
WHERE ROWNUM <=400000
)  
WHERE RN >300000

excel的数据每个sheet页也有限制,我用的是07版的excel,每个sheet页最多显示65536页。所以10W条数据变成了2个sheet,

特别提示:plsql导出的excel会把导出的语句显示出来,切换到 SQL Results可查看使用的语句,如下图

接下来就是将excel导入到sqlserver当中,选择要导入的数据库选中【表】右键选择【所有任务】选中【导入数据】打开dts工具,选择下一步

在【选择数据源】这一步,选择对应的excel版本和excel存放的路径,点击下一步

【选择目的】这一步不用修改

【指定表复制或查询】我选择第一个:从源数据库复制表和视图

【选择表和视图】这一步最重要:需要选择对应的excel数据sheet页,并在【目的】中指定要生成的表名字(表名字可以重复,在最后导入时。如果表名是重复的会提示创建表失败,但数据仍然可以导入进去)

然后选择下一步。

导入之后查看数据发现一些列明明有值,却显示成了null,第一时间反应是转换出错了,数据类型不对应,网上搜素有很多解决办法,

我采用的是这一种:在excel中找到工具栏【数据】选项卡,选择【分列】功能,分列功能共3步,前2步不管,直接到第三部,选择【文本】数据格式,点击完成

如下图:注意:直接右键修改单元格格式为文本,是没有用的

excel这样处理后,再次导入,查询发现数据基本正常,然后用相应的sql语句导入对应的表格即可

这是我本次使用的一些语句

--将数据导入表中,一些nvarchar需要转换成float,使用cast函数,转换2次的原因是
--转一次的话有的数据小数点后莫名多了很多位,这是网上的解决办法,转2次
INSERT /*+append*/  INTO RECORD_TXF (EARTH_NO,LAND_CARD,LOCATION,ROOM_USER,JZ_AREA1,FT_AREA,PIC_NO,USAGE,ZONG_AREA,BUILD,ROOM,CHILD_NO,MEMO,DEAD_TIME) 
SELECT LANDNO,LANDCERNO,LREPOSE,OBLIGEE,cast(cast(BUILDAREA as decimal(18,0)) as float) as bu,LUPAREA_A,LMAPNO,convert(varchar(50),LANDUSE),cast(cast(LUPAREA as decimal(18,0)) as float) as lu,HOUSENO,ROOMNO,LANDFGNO,LANDNOALL,LENDDATE 
FROM TXF11 A 
where not exists (SELECT 1
               FROM RECORD_TXF B 
               WHERE A.OBLIGEE=B.ROOM_USER AND A.LANDNO=B.EARTH_NO AND A.LANDFGNO=B.CHILD_NO)    
--将一个表中的数据复制到另外一个新表中的语句
select * into record_txf from record2016824_14
--sqlserver的列连接方法,oracle是||,sqlserver是++

select EARTH_NO+'-'+CHILD_NO from RECORD_TXF

 

转载于:https://www.cnblogs.com/-txf-/p/7240279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值