Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012 interrogazione dei dati di Access 2007 utilizzando l'errore OPENROWSET

Infine, dopo diversi tentativi falliti di fare in modo che SQL Server "parli" con un database di Access, sia come "Server collegato" in SSMS o tramite OPENROWSET() in T-SQL:ho trovato questo post sul blog che offriva i seguenti tre (3) suggerimenti.

Modifica n. 1:impostazioni del provider OLE DB

Il provider OLE DB per ACE (o Jet) deve avere le opzioni "Parametro dinamico" e "Consenti processo in corso" abilitate. In SSMS, apri il

Oggetti server> Server collegati> Provider

branch, fai clic con il pulsante destro del mouse su "Microsoft.ACE.OLEDB.12.0" (o "Microsoft.Jet.OLEDB.4.0"), scegli "Proprietà" e assicurati che tali opzioni siano selezionate:

Modifica n. 2:autorizzazioni per le cartelle temporanee

Questo è quello che mi lasciava perplesso.

Apparentemente SQL Server deve scrivere informazioni in un file temporaneo durante l'esecuzione di una query OLE DB su un database di Access. Poiché SQL Server viene eseguito come servizio, utilizza la cartella %TEMP% dell'account con cui è in esecuzione il servizio.

Se il servizio SQL Server è in esecuzione con l'account "Servizio di rete" integrato, la cartella temporanea è

%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp

e se è in esecuzione con l'account "Servizio locale" integrato, la cartella temporanea è

%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp

Il mio problema era che SSMS era in esecuzione in mio account (non SERVIZIO DI RETE), quindi avevo solo accesso in lettura alla cartella Temp

Una volta che mi sono concesso Modifica le autorizzazioni su quella cartella

e abilitato le query OPENROWSET come documentato in un'altra domanda qui, vale a dire ...

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

... la mia richiesta ha funzionato bene:

Modifica n. 3:memoria_da_riservare

Sebbene non fosse necessario utilizzarlo nel mio caso, il suddetto blog afferma anche che la regolazione del parametro di avvio "-g memory_to_reserve" per il servizio SQL Server può anche aiutare a evitare errori simili. Per farlo:

  • avvia Gestione configurazione SQL Server
  • fai clic con il pulsante destro del mouse sul servizio SQL Server (scheda "Servizi SQL Server") e scegli "Proprietà"
  • nella scheda "Avanzate", anteporre -g512; all'impostazione "Parametri di avvio"
  • riavviare il servizio SQL Server

Per ulteriori dettagli sull'impostazione "memory_to_reserve", vedere l'articolo MSDN qui.