oracle資料轉入到sqlserver的一次記錄
阿新 • • 發佈:2019-01-26
首先把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