Ad Hoc Distributed Queries

Vandaag voor het eerst een zogenaamde Distributed query in SQL gemaakt.
Simpelgezegd houdt dit in dat je een query doet op een andere database en de data daaruit gebruikt in je eigen database.

Hier kun je het woord database op meerdere manieren interpreteren. Volgens mij kun je ook wel een Distributed Query doen op een XML-bestand, wat dus niet een echte database is.

Ik heb vandaag dus data uit een tabel van een Access database via een insert-statement in SQL geimporteerd. Normaliter zou ik zoiets wel doen met [Ctrl]+[C] en [Ctrl]+[V], maar het betrof hier ongeveer 650.000 records (een postcode tabel). Aangezien het kladblok maar 65.000 records in het geheugen kan laten staan zou ik deze actie minstens 10x moeten doen. Daar houdt ik niet echt van.

Dus op zoek naar een alternatief, dat ik vond in dit type query.

Ten eerste moet je dit activeren in MS SQL Server 2005. Standaard staat dit om beveiligingsredenen uit. Door middel van de volgende query uit te voeren kun je de functionaliteit activeren:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

Ik denk zelfs dat alleen het onderste gedeelte (de laatste 4 regels) ook wel goed genoeg zijn, maar dat heb ik niet getest.

Nu kun je met MS SQL Server 2005 een distributed query maken. Ik heb iets uitgevoerd zoals dit:

INSERT INTO [PostcodeTabel]
SELECT *
FROM OPENROWSET
(
    'Microsoft.Jet.OLEDB.4.0',
    'C:\\Temp\\Databases\\NLPostcodeDatabase.mdb';
    'admin';
    '',
    'SELECT * FROM AccessPostcodeTabel'
)

Het uitvoeren duurde enkele seconden, maar daarna stonden alle 650.000 records ook in de gewenste tabel.

Wat een vreugde. Ik was best wel in m’n nopjes toen ik hier achter was gekomen. Weer eens wat leuks geleerd op het werk.


Share

comments powered by Disqus