oracle数据转入到sqlserver的一次记录
2017-08-07 22:18
239 查看
首先把oracle的数据查询出来,数据比较多的话需要分页,plsql查询超过12W条就会卡主,所以本次使用分页查询,每次查询10W条,
然后将数据复制到excel当中。
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语句导入对应的表格即可
这是我本次使用的一些语句
然后将数据复制到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
相关文章推荐
- SqlServer和Oracle从多行记录(数据集)中查询结果并拼接成一个字符串的SQL语句(纵表数据转成拼接的文本)
- mysql oracle sqlserver查询n条记录数据的方法
- SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。
- mysql 、oracle、sqlserver获取最近一次插入记录
- 用SQLServer实现数据表中,将任意一条记录信息移动到该表中的任意位置
- SQLServer向Oracle转数据注意事项
- Oracle查询重复数据并删除,只保留一条记录
- Oracle查询重复数据与删除重复记录方法
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Oracle数据分组后取每组的一条记录
- oracle 一次删除多张表的数据(未测试版)
- Linux下一次数据仓库进行迁移记录
- Oracle删除重复记录只保留一条数据的几种方法
- 记录一次raid故障后的恢复和回迁数据全过程
- oracle数据中删除数据时提示“记录被另一个用户锁住” 解决方法
- oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
- 针对各主流数据mysql、sqlserver、oracle中文乱码问题。
- oracle查询重复数据与删除重复记录方法
- oracle一次插入多条数据
- [DB][ORACLE][统计函数]使用LAG和LEAD函数可以在一次查询中取出同一字段的前N行的数据和后N行的值