sql >> Databáze >  >> RDS >> Sqlserver

32bitový Excel a 64bitový SQL Server

Co by mohlo být jednodušší než získat data z excelové tabulky na SQL Server?

Existuje mnoho způsobů, jak tento úkol splnit. Můžete využít Služby integrace (dříve DTS) nebo import a export čaroděj, který je stejný pod kapotou. Dalším způsobem je vytvoření jednoduché ADO.NET aplikace . Můžete použít Propojený server mechanismus, který vám umožňuje vidět jakýkoli objekt dosažitelný ODBC / OLE DB ve formě tabulky (souboru tabulek) nebo výsledku ad hoc dotazu.

Bylo to do té doby, než 64bitová architektura přestala být něčím ze třídy hi-end a přišla na notebooky pro vývojáře a uživatele. Typický uživatel si pravděpodobně nenainstaluje databázový server, zatímco pro vývojáře je normální mít 64bitový SQL Server na 64bitovém počítači s 32bitovým MS Office. V tomto případě však může být použití Excelu nebo Accessu s propojenými servery SQL Server problém, protože ovladače jsou 32bitové. Pro MS Office nejsou k dispozici žádní poskytovatelé, i když jednoho na svém PC nainstalovaného mám.

Pokus o použití aplikace Excel nebo Access s propojenými servery SQL Server, jak je popsáno v dokumentaci, tedy způsobí následující chybu:

Zpráva 7302, úroveň 16, stav 1, řádek 1

Nelze vytvořit instanci poskytovatele OLE DB «Microsoft.ACE.OLEDB.12.0» pro propojený server…

Takže, co dělat?

Nainstalujte 64bitového poskytovatele, který je k dispozici ke stažení na Microsoft Access Database Engine 2010 Redistributable. Během procesu instalace se zobrazí následující chyba:

Pokud by v počítači nebyl nainstalován 32bitový Office, toto varování se nezobrazí.

Mám si vybrat mezi 64bitovou nebo 32bitovou verzí MS Office a 64bitovou nebo 32bitovou verzí SQL Server? Odinstalace jedné verze a instalace jiné není flexibilní řešení. Navíc to není vždy možné. Podívejme se na otázku, kterou člověk vznesl na MSDN:

Databáze MS Access je produkční prostředí na webu zákazníka a není pro mě možností ji odinstalovat a nainstalovat 64bitovou verzi. Samozřejmě také není možné odinstalovat stávající 64bitový SQL Server a nainstalovat 32bitovou verzi. Jedinou možností by pak byla dodatečná instalace SQL Server 32 bitů, pouze poskytnutí odkazu na MS Access. Připadá mi to docela hrozné.

Této části nerozumím.

Protože neexistuje žádný 64bitový Jet, musíte si stáhnout a nainstalovat 64bitovou verzi «Microsoft Access Database Engine 2010 Redistributable». Děkuji za vaši odpověď, ale při instalaci AccessDatabaseEngine_X64.exe se mi zobrazí následující chyba (obrázek 1) Prostudujte si tento článek znalostní báze: support.microsoft.com/kb/2269468 Článek v odkazu ve vaší poslední zprávě říká, že je třeba odinstalovat všechny 32bitové produkty Office. To mi nedává smysl, protože cílem je připojit se k 32bitové databázi MS Access… Abyste se mohli připojit k souboru Access (32bitový nebo 64bitový) ze serveru SQL, musíte nainstalovat 64bitovou verzi „Microsoft ACE OLEDB Provider“. Zkoušel jsem ale nainstalovat 64bitový ovladač, ale hlásí mi to chybu instalace… Předchozí článek znalostní báze vysvětluje příčinu a poskytuje řešení, můžete se na něj obrátit. Provádíte mě v kruzích.

Problémem je, aby 64bitová verze Microsoft ACE OLEDB Provider fungovala s 32bitovým Office. Proč to není možné udělat přímo, je velká otázka. Na toto téma je mnoho informací:

Skutečnost, že nemohou, nás nutí zkompilovat dvě různé verze naší aplikace; jeden speciálně pro platformu x86 a jeden pro platformu x64. Potom musíme nějak určit, která verze ovladače ACE je nainstalována, abychom věděli, kterou verzi (32 nebo 64 bit) naší aplikace nainstalovat. Život by byl mnohem jednodušší, kdybychom mohli naši aplikaci pouze zkompilovat pro výchozí AnyCPU a poté by bylo povoleno nainstalovat 32 i 64 datové poskytovatele... Proč nemohou 32 a 64 bit ACE koexistovat? Je to založeno na skutečnosti, že společnost Microsoft nepodporuje souběžnou instalaci 32 a 64bitové sady Microsoft Office 2010 nebo jejich závislých součástí… Omlouvám se, ale to není příliš užitečná odpověď na otázku. Otázka:Proč nelze obě 32 a 64bitové verze Microsoft Access Database Engine 2010 Redistributable (AccessDatabaseEngine.exe a AccessDatabaseEngine_X64.exe) nainstalovat na stejný počítač? A:Microsoft nepodporuje souběžnou instalaci 32 a 64bitového Microsoft Office 2010. To není odpověď, to je jen opakování otázky jinými slovy. Otázka:Proč to nemohu udělat? A:Protože to nepodporujeme. Otázka:Proč to nemůžete podpořit? Odpověď:Protože to nepodporujeme.

Jako řešení jsem použil AccessDatabaseEngine_X64.exe s klíčem /passive, který umožňuje koexistenci 64bitové verze poskytovatele s 32bitovou verzí Office. Je třeba poznamenat, že společnost Microsoft tuto metodu oficiálně nepodporuje. Kromě toho jsou zde varování týkající se možných problémů s kompatibilitou.

Když jsem nainstaloval ovladač AccessDatabaseEngine_x64.exe … MS Office Pro Plus zahájí proces konfigurace MS, který může trvat minutu nebo dvě, než se otevře dokument nebo aplikace Office . Pokud je nainstalován Office 2010 32bit a pokud je nainstalován 64bitový ace s /passive , poté **pokaždé**, když spustíte Access 2010, získáte automatickou instalační rutinu, která se resetuje na 32bitové ovladače pro kancelář .

V mém případě (Office 2013 Pro Plus, SQL Server 2012 Developer Ed., Windows 8.1) nebyly žádné viditelné problémy (klepání na dřevo). Přesto bych rád dodal, že je tak jak je a bez jakýchkoli závazků.

Stáhněte si AccessDatabaseEngine_x64.exe, vytvořte bod obnovení systému (zdá se, že se vytváří automaticky při aktualizaci součástí Office) a spusťte jej z příkazového řádku. Zde jsou možné klíče:

Na rozdíl od obrázku 2 je instalace spuštěna

Potom klepněte na tlačítko Aktualizovat v místní nabídce Poskytovatelé:

Velmi rychle jsem vytvořil jednoduchý soubor xslx:

V SQL Server vytvořte propojený server v tomto Excelu:

pokud existuje (vyberte 1 ze sys.servers, kde název ='XlsLnkSrv') exec sp_dropserver @server ='XlsLnkSrv', @droplogins ='droplogins'exec sp_addlinkedserver @server ='XlsLnkSrv', @ACE10 =. , @provider ='Microsoft.ACE.OLEDB.12.0', @datasrc ='C:\Temp\Sample.xlsx', @provstr ='Excel 12.0; HDR=Ano'

Skript 1

Přečtěte si:

vyberte * z openquery (XlsLnkSrv, 'Select * from [Sheet1$]')

Skript 2

je to úspěšné? Ne!

Msg 7399, Level 16, State 1, Line 1
Poskytovatel OLE DB «Microsoft.ACE.OLEDB.12.0» pro propojený server «XlsLnkSrv» ohlásil chybu. Poskytovatel neposkytl žádné informace o chybě.
Zpráva 7303, úroveň 16, stav 1, řádek 1
Nelze inicializovat objekt zdroje dat poskytovatele OLE DB «Microsoft.ACE.OLEDB.12.0» pro propojený server «XlsLnkSrv».

Přesto je to úspěšné!

Stejně tak

vyberte * z openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Databáze=C:\Temp\Sample.xlsx;HDR=Yes', 'Vybrat * z [List1$]') 

Nejprve musíme udělat následující:

exec sp_configure 'zobrazit pokročilé možnosti', 1;reconfigure;exec sp_configure 'Ad Hoc Distribuované dotazy', 1;reconfigure

Skript 3

Na závěr bych rád poznamenal, že 64bitový poskytovatel nahradil 32bitový. Pokud vytvoříme připojení pro Sample.xslsx v Data Flow balíčku DTS, dojde k chybě inicializace Microsoft Office 12.0 Access Database Engine OLE DB Provider, což je logicky správné, protože devenv.exe je 32bitový, zatímco poskytovatel je 64bitový. Pro obnovení chování je nutné obnovit 32bitového poskytovatele Office (zde). V tomto případě však nemůžeme použít propojený server. Aby propojený server fungoval, přejděte na začátek článku.


  1. Zkontrolujte, zda v poli Postgres existuje NULL

  2. Jak vytvořit neomezenou úroveň menu přes PHP a mysql

  3. Spuštění PostgreSQL pomocí Amazon RDS

  4. JDBC ResultSet získat sloupce s aliasem tabulky