Pierwszym krokiem jest stworzenie łącza do zdalnej maszyny:
/****** Object: LinkedServer [MYSQL] Script Date: 09/09/2010 20:33:31 ******/ IF EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'MYSQL') EXEC master.dbo.sp_dropserver @server=N'MYSQL', @droplogins='droplogins' GO /****** Object: LinkedServer [MYSQL] Script Date: 09/09/2010 20:33:31 ******/ EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL', @srvproduct=N'MySQL', @provider=N'MSDASQL', @provstr=N'Driver=MySQL ODBC 5.1 Driver;SERVER=localhost;UID=root;PWD=tajnehaslo;DATABASE=sprzedaz;PORT=3306;CHARSET=utf8' /* For security reasons the linked server remote logins password is changed with ######## */ EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MYSQL', @useself=N'True', @locallogin=NULL, @rmtuser=NULL, @rmtpassword=NULL
załóżmy że mamy tabelkę w bazie zdefiniowaną jako:
CREATE TABLE [dbo].[tab_import]( [id] [int] IDENTITY(1,1) NOT NULL, [O1] [varchar](30) NULL, [L1] [varchar](70) NULL, [O2] [varchar](30) NULL, [L2] [varchar](70) NULL, [O3] [varchar](30) NULL, [L3] [varchar](70) NULL, [O4] [varchar](30) NULL, [L4] [varchar](70) NULL, [O5] [varchar](30) NULL, [L5] [varchar](70) NULL, CONSTRAINT [PK_tab_import] PRIMARY KEY CLUSTERED ([id] ASC) ) ON [PRIMARY]
Posiadamy również tabelkę po stronie MySQL-a zdefiniowaną jaką
CREATE TABLE `tab_import` ( `id` int(11) NOT NULL AUTO_INCREMENT, `O1` varchar(30) DEFAULT NULL, `L1` varchar(70) DEFAULT NULL, `O2` varchar(30) DEFAULT NULL, `L2` varchar(70) DEFAULT NULL, `O3` varchar(30) DEFAULT NULL, `L3` varchar(70) DEFAULT NULL, `O4` varchar(30) DEFAULT NULL, `L4` varchar(70) DEFAULT NULL, `O5` varchar(30) DEFAULT NULL, `L5` varchar(70) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;i chcemy przetransferować dane z bazy MSSQl do bazy MySQL. Skorzystamy w takim przypadku z możliwości INSERT INTO ... SELECT
INSERT INTO openquery (MYSQL,'select * from test.tab_import where 1 = 0') (O1, L1, O2, L2, O3, L3, O4, L4, O5, L5) SELECT O1, L1, O2, L2, O3, L3, O4, L4, O5, L5 FROM tab_import AS tab_import_1Ciekawostką w tym układzie jest konstrukcja zagnieżdżonego SELECT-a wykorzystywanego przez OPENQUERY. warunek w tym zapytaniu filtruje wszystkie rekordy gdyż de fakto nie są one nam do niczego potrzebne. Podobna sztuczka nie jest wskazana w przypadku gdybyśmy chcieli wykonać DELETE lub UPDATE.
Brak komentarzy:
Prześlij komentarz