sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012 opvragen van Access 2007-gegevens met behulp van OPENROWSET-fout

Eindelijk, na verschillende mislukte pogingen om SQL Server te laten "praten met" een Access-database - hetzij als een "Linked Server" in SSMS of via OPENROWSET() in T-SQL – ik vond deze blogpost met de volgende drie (3) suggesties.

Tweak #1:OLE DB Provider-instellingen

De OLE DB-provider voor ACE (of Jet) moet de opties "Dynamic parameter" en "Allow inprocess" hebben ingeschakeld. Open in SSMS de

Serverobjecten> Gekoppelde servers> Providers

branch, klik met de rechtermuisknop op "Microsoft.ACE.OLEDB.12.0" (of "Microsoft.Jet.OLEDB.4.0"), kies "Eigenschappen" en zorg ervoor dat deze opties zijn geselecteerd:

Tweak #2:Tijdelijke mapmachtigingen

Dit is degene die me dwars zat.

Blijkbaar moet SQL Server informatie in een tijdelijk bestand schrijven terwijl een OLE DB-query wordt uitgevoerd op een Access-database. Omdat SQL Server als een service wordt uitgevoerd, gebruikt het de map %TEMP% van het account waaronder de service wordt uitgevoerd.

Als de SQL Server-service wordt uitgevoerd onder het ingebouwde "Network Service"-account, is de tijdelijke map

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

en als het draait onder het ingebouwde "Local Service"-account, dan is de tijdelijke map

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

Mijn probleem was dat SSMS draaide onder mijn account (niet NETWERKSERVICE) dus ik had alleen leestoegang tot de map Temp

Zodra ik mezelf toestemming heb gegeven om die map te wijzigen

en schakelde OPENROWSET-query's in zoals beschreven in een andere vraag hier, namelijk ...

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

... mijn vraag werkte prima:

Tweak #3:memory_to_reserve

Hoewel ik het in mijn geval niet hoefde te gebruiken, beweert de bovengenoemde blog ook dat het aanpassen van de opstartparameter "-g memory_to_reserve" voor de SQL Server-service ook kan helpen soortgelijke fouten te voorkomen. Om dat te doen:

  • start SQL Server Configuration Manager
  • klik met de rechtermuisknop op de SQL Server-service (tabblad "SQL Server Services") en kies "Eigenschappen"
  • op het tabblad "Geavanceerd" zet u -g512; naar de instelling "Opstartparameters"
  • start de SQL Server-service opnieuw

Zie het MSDN-artikel hier voor meer informatie over de instelling "memory_to_reserve".



  1. Ga aan de slag met Apache Spark – Part 1

  2. Een Oracle Associative Array gebruiken in een SQL-query

  3. Hoe kan ik ALLEEN records van gisteren selecteren?

  4. SqlDataAdapter.Fill-methode traag