2016-05-02 72 views
13

Sto tentando di esportare dai miei dati Table nella query Excel tramite T-SQL. Dopo po 'di ricerca sono arrivato fino a questoImpossibile creare un'istanza del provider OLE DB Microsoft.Jet.OLEDB.4.0 per server collegato null

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 
         'Excel 8.0;Database=G:\Test.xls;', 
         'SELECT * FROM [Sheet1$]') 
SELECT * 
FROM dbo.products 

Quando eseguo la query di cui sopra sono sempre questo errore

Msg 7302, livello 16, stato 1, riga 7 Impossibile creare un'istanza di OLE DB provider "Microsoft.Jet.OLEDB.4.0" per server collegato "(null)".

quindi siamo andati attraverso internet per soluzione, ha ottenuto sul link qui sotto

https://blogs.msdn.microsoft.com/spike/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-error/

nel link qui che dicevano come abbiamo bisogno di essere amministratore di creare la cartella in C unitàTEMP cartella dal OPENROWSET crea alcuni file o cartelle all'interno della cartella TEMP

Lo sto facendo in My Home PC e sono l'amministratore. Sto ancora ottenendo lo stesso errore.

SQL SERVER dettagli

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64) 10 marzo 2016 16:49:45 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition (64 bit) su Windows 10 Pro 6.3 (Build 10586:)

Tutti gli indicatori per risolvere il problema sarà molto apprezzato

Aggiornamento: Già ho configurato il Ad Hoc Distributed Queries e

eseguito il seguito interroga

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1 
GO 

ora sto ottenendo questo errore

Msg 7438, livello 16, stato 1, riga 7 Il 32 -bit provider OLE DB "Microsoft.Jet.OLEDB.4.0" non può essere caricato in-process su un server SQL SQL a 64 bit.

+0

Questo SO link può aiutare. - http://stackoverflow.com/questions/12090555/get-excel-sheet-into-temp-table-using-a-script –

+0

Un'altra cosa da notare che nella tua istruzione di inserimento, invece di 'SELECT * FROM dbo.products ', dovrebbe essere -' INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0; Database = G: \ Test.xls;', 'SELEZIONA * DA [Foglio1 $]') ' –

+0

@KrishnrajRana - Nessuna differenza, Ancora errore :( –

risposta

21

OK, ho fatto il lavoro per me e sembra che SO mi consenta di postare oggi.

Ho MS Sql server 2012 e Office 2013. Questo sembra essere molto schizzinoso, quindi potrebbe essere necessario adattarsi alle versioni specifiche.

  1. Scaricare il Microsoft.ACE.OLEDB.12.0 per Windows, versione a 64 bit trovato qui: https://www.microsoft.com/en-us/download/details.aspx?id=13255
  2. installarlo sul vostro server.
  3. Verificare l'utente che esegue SQL Server e assicurarsi che l'utente abbia accesso alla directory temporanea C: \ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ Temp se si tratta di un account di servizio locale o C: \ Windows \ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp se si tratta di un account di servizio di rete.
  4. Configura 'Ad Hoc' query distribuite e abilitare il file Microsoft.ACE.OLEDB come questo:

Ecco i comandi sp_configure:

SP_CONFIGURE 'show advanced options', 1; 
GO 
RECONFIGURE; 
SP_CONFIGURE 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1 

Assicurarsi di registrare Msexcl40.dll in questo modo:

regsvr32 C:\Windows\SysWOW64\msexcl40.dll 
+0

Siamo spiacenti. Ho intenzione di provare a mettere il resto in un commento. Penso di essermi assicurato di non pubblicare una stringa troppo lunga. – quest4truth

+0

Ecco i comandi SP_CONFIGURE: 'SP_CONFIGURE 'mostra opzioni avanzate', 1; GO RICONFIGURA; SP_CONFIGURE 'query distribuite ad hoc', 1; GO RICONFIGURA; EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess', 1 EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParam', 1' – quest4truth

+0

Assicurarsi di registrare Msexcl40.dll come questo: 'regsvr32 C: \ Windows \ SysWOW64 \ msexcl40.dll' – quest4truth

0

Lavori !!! Grazie mille. Solo per server Win a 64 bit 2012R2. Consentitemi di inserire l'intero script di lavoro parzialmente ripetuto da sopra che non è facile (come per me) combinare insieme:

1) Scaricare il Microsoft.ACE.OLEDB.12.0 per Windows, versione a 64 bit trovato qui: https://www.microsoft.com/en-us/download/details.aspx?id=13255

2) Creare il file excel con le rispettive colonne (nome e classe in questo caso).

codice 3) Esegui di seguito:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

/* -- Not sure commented bits are necessary but I also have run them 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1 
GO 

-- below two lines failed with: Msg 2787, Level 16, State 1, Procedure sp_MSset_oledb_prop, Line 106 Invalid format specification: '%1!.'. 
    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1 

-- but works all two as below: 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
-- Succeded to run after success with Excel so does not looks like necessary 


*/ 

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 8.0;Database=C:\testing.xlsx;', 
'SELECT Name, Class FROM [Sheet1$]') 
SELECT [Name],[Class] FROM Qry_2 
GO 
-1

Si prega di eseguire le query di seguito:

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0' , N'AllowInProcess', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0' , N'DynamicParameters', 1 GO