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

SQL Server 2012 forespørger Access 2007-data ved hjælp af OPENROWSET-fejl

Endelig, efter adskillige mislykkede forsøg på at få SQL Server til at "tale til" en Access-database – enten som en "Linked Server" i SSMS eller via OPENROWSET() i T-SQL – Jeg fandt dette blogindlæg, der gav følgende tre (3) forslag.

Tweak #1:OLE DB-udbyderindstillinger

OLE DB-udbyderen til ACE (eller Jet) skal have indstillingerne "Dynamisk parameter" og "Tillad inprocess" aktiveret. I SSMS skal du åbne

Serverobjekter> Sammenkædede servere>Udbydere

gren, højreklik på "Microsoft.ACE.OLEDB.12.0" (eller "Microsoft.Jet.OLEDB.4.0"), vælg "Egenskaber", og sørg for, at disse muligheder er valgt:

Tweak #2:Temp-mappetilladelser

Det var den, der overraskede mig.

Tilsyneladende skal SQL Server skrive information ind i en midlertidig fil, mens du kører en OLE DB-forespørgsel mod en Access-database. Fordi SQL Server kører som en tjeneste, bruger den mappen %TEMP% på den konto, som tjenesten kører under.

Hvis SQL Server-tjenesten kører under den indbyggede "Netværkstjeneste"-konto, er den midlertidige mappe

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

og hvis den kører under den indbyggede "Lokal Service"-konto, er den midlertidige mappe

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

Mit problem var, at SSMS kørte under min konto (ikke NETVÆRKSSERVICE), så jeg havde kun læseadgang til Temp-mappen

Engang gav jeg mig selv Rediger tilladelser på den mappe

og aktiverede OPENROWSET-forespørgsler som dokumenteret i et andet spørgsmål her, nemlig ...

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

... min forespørgsel fungerede fint:

Tweak #3:memory_to_reserve

Selvom jeg ikke behøvede at bruge det i mit tilfælde, hævder den førnævnte blog også, at justering af "-g memory_to_reserve"-startparameteren for SQL Server-tjenesten også kan hjælpe med at undgå lignende fejl. For at gøre det:

  • start SQL Server Configuration Manager
  • højreklik på SQL Server-tjenesten ("SQL Server Services"-fanen), og vælg "Egenskaber"
  • på fanen "Avanceret" skal du sætte -g512; foran til indstillingen "Opstartsparametre"
  • genstart SQL Server-tjenesten

For flere detaljer om indstillingen "memory_to_reserve" se MSDN-artiklen her.



  1. Om GO-kommandoen i SQL Server

  2. MySQL – Database Character Set Encoding and Collation Explained

  3. Hvordan udfører man en SQLite-forespørgsel i en Android-applikation?

  4. Få navnet på opkaldsproceduren eller funktionen i Oracle PL/SQL