Insert into med OPENQUERY
Mål
Migrera data från nuvarande databas (Oracle 10g) till ny databas (SQL Server 2008).
Problem
Mellan från ett 32 bit system till Oracle 64 bit databashotell var det inga problem att använda simpel Linked Server teknik:
exec('INSERT INTO SQLSERVER.[SQL_SCHEMA].[SQL_TABLE] SELECT * FROM LINKED_SERVER..ORACLE_SCHEMA.ORACLE_TABLE')Men däremot från test och produktionsmiljöns 64 bit system fanns det hinder. Kolumner som i Oracle har typen NUMBER blev endast nollor i målsystemet med följden att det dels blev fel data och dels, i de fall som kolumn var primärnyckel, blev det fel i importen.
Lösningen
Lösningen blev OPENQUERY och konvertering av kolumnerna av typen NUMBER.
Så här ser det ut:
exec('insert into SQLSERVER.[SQL_SCHEMA].[SQL_TABLE](COL1, COL2) select * from OPENQUERY(LINKED_SERVER, ''select TO_NUMBER(COL1), TO_CHAR(COL2) from ORACLE_SCHEMA.ORACLE_TABLE'')')
Etiketter: databas, oracle, sql server

0 Comments:
Skicka en kommentar
<< Home