De postcodetabel installeren
Van gedownload CSV-bestand naar een werkende tabel in je eigen database. Kom je er niet uit? Neem contact op of gebruik de chat rechtsonder.
Instructiefilmpjes
Korte filmpjes van een paar minuten, gegroepeerd per onderwerp. Je hoeft ze niet op volgorde te kijken.
Aan de slag
3 filmpjesWat je krijgt en hoe je het openmaakt. Begin hier als dit je eerste bestelling is.
Installeren in SQL Server
6 filmpjesDe meest gebruikte route. Van voorbereiding tot een gevulde, geïndexeerde tabel.
Andere systemen
3 filmpjesDraai je geen SQL Server, of wil je de import onderweg bewerken?
Gebruiken in Power BI
5 filmpjesVan tabel naar rapport: koppelen, verrijken en op de kaart tonen.
Toepassingen
3 filmpjesWat je met de data doet als hij eenmaal draait.
De postcodetabel inlezen in je eigen systeem
Alle bestanden zijn CSV, puntkomma-gescheiden, UTF-8 gecodeerd, met een leesbare kopregel. Hieronder staat per pakket een compleet PowerShell-script dat de tabel aanmaakt, het bestand laadt en de indexen zet. Vervang bovenin het pad, de server en de databasenaam en je kunt draaien.
Brons bevat de postcodetabel op reeksniveau: per postcode een begin- en eindhuisnummer. Dat is compact (ruim 450.000 rijen, enkele seconden laden) maar je zoekt met BETWEEN in plaats van op een exact huisnummer. Onderaan het script staat een voorbeeldquery.
<#
postcode-import-brons.ps1
Laadt de postcodetabel Brons in SQL Server.
BELANGRIJK — start PowerShell als administrator:
Klik met rechts op Windows PowerShell en kies "Als administrator uitvoeren".
Zonder verhoogde rechten kan SQL Server het CSV-bestand niet openen
en krijg je foutmelding 4861 (Cannot bulk load).
Het account waarmee je verbindt heeft nodig:
- db_owner op de doeldatabase (of CREATE TABLE + ALTER + INSERT)
- de serverrol bulkadmin, of de rechten ADMINISTER BULK OPERATIONS
- leesrechten van de SQL Server-service op de map met het CSV-bestand
#>
# --- instellingen ------------------------------------------------
$Server = "localhost\SQLEXPRESS"
$Database = "Adresdata"
$Csv = "C:\data\postcode-brons-2026-08.csv"
$Table = "dbo.Postcodes"
# --- controles ---------------------------------------------------
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Error "Start PowerShell als administrator en probeer opnieuw."
exit 1
}
if (-not (Get-Module -ListAvailable -Name SqlServer)) {
Write-Host "Module SqlServer ontbreekt, wordt geinstalleerd..."
Install-Module -Name SqlServer -Scope AllUsers -Force -AllowClobber
}
Import-Module SqlServer
if (-not (Test-Path $Csv)) { Write-Error "Bestand niet gevonden: $Csv"; exit 1 }
# --- SQL: tabel voor de postcodetabel op reeksniveau -------------
# Brons bevat postcodes met een huisnummerreeks: ruim 450.000 rijen.
# Let op de reeksvelden; die bestaan niet in Zilver en Goud.
$create = @"
IF OBJECT_ID('$Table') IS NOT NULL DROP TABLE $Table;
CREATE TABLE $Table (
PostcodeVolledig char(7) NOT NULL,
PostcodeNummers smallint NOT NULL,
PostcodeLetters char(2) NOT NULL,
Straat nvarchar(80) NOT NULL,
HuisnummerRangeStart int NOT NULL,
HuisnummerRangeEind int NOT NULL,
Reeksindicatie nvarchar(10) NOT NULL, -- Even / Oneven / Gemengd
Plaats nvarchar(80) NOT NULL,
Gemeente nvarchar(80) NOT NULL,
Provincie nvarchar(40) NOT NULL,
Latitude decimal(9,6) NULL,
Longitude decimal(9,6) NULL,
XCoordinaat int NULL,
YCoordinaat int NULL,
CreatieDatum date NULL
);
"@
$load = @"
BULK INSERT $Table
FROM '$Csv'
WITH (
FIRSTROW = 2, -- kopregel overslaan
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0d0a', -- CRLF; met 0x0a blijft er een wagenterugloop staan
CODEPAGE = '65001', -- UTF-8
TABLOCK
);
"@
# --- SQL: indexen -------------------------------------------------
# Zoeken gaat op postcode; het huisnummer valt binnen de reeks.
$index = @"
CREATE CLUSTERED INDEX IX_Postcodes_Postcode
ON $Table (PostcodeVolledig);
CREATE NONCLUSTERED INDEX IX_Postcodes_Reeks
ON $Table (PostcodeVolledig, HuisnummerRangeStart, HuisnummerRangeEind)
INCLUDE (Straat, Plaats);
CREATE NONCLUSTERED INDEX IX_Postcodes_Plaats
ON $Table (Plaats, Straat);
"@
# --- 1. tabel aanmaken -------------------------------------------
Write-Host "Tabel aanmaken..."
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $create
# --- 2. bestand laden --------------------------------------------
Write-Host "Bestand laden, dit kan even duren..."
$sw = [Diagnostics.Stopwatch]::StartNew()
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $load -QueryTimeout 0
$sw.Stop()
Write-Host ("Geladen in {0:N0} seconden." -f $sw.Elapsed.TotalSeconds)
# --- 3. indexen zetten -------------------------------------------
# Pas na het laden: dat scheelt bij grote bestanden veel tijd.
Write-Host "Indexen aanmaken..."
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $index -QueryTimeout 0
# --- klaar --------------------------------------------------------
$n = Invoke-Sqlcmd -ServerInstance $Server -Database $Database `
-Query "SELECT COUNT(*) AS Rijen FROM $Table"
Write-Host ("Klaar. {0:N0} rijen in $Table." -f $n.Rijen)
# --- zoeken op postcode en huisnummer ------------------------------
# Brons kent geen losse huisnummers: je zoekt binnen de reeks.
#
# SELECT Straat, Plaats
# FROM dbo.Postcodes
# WHERE PostcodeVolledig = '2761 GD'
# AND 15 BETWEEN HuisnummerRangeStart AND HuisnummerRangeEind;Zilver bevat elk afzonderlijk adres: ruim 9 miljoen rijen met pandgegevens erbij. Andere kolommen dan Brons, en een andere index: de sleutel is postcode plus huisnummer, letter en toevoeging. Het script zet vooraf de database op SIMPLE recovery en reserveert 4 GB, anders duurt de import onnodig lang.
<#
postcode-import-zilver.ps1
Laadt de postcodetabel Zilver in SQL Server.
BELANGRIJK — start PowerShell als administrator:
Klik met rechts op Windows PowerShell en kies "Als administrator uitvoeren".
Zonder verhoogde rechten kan SQL Server het CSV-bestand niet openen
en krijg je foutmelding 4861 (Cannot bulk load).
Het account waarmee je verbindt heeft nodig:
- db_owner op de doeldatabase (of CREATE TABLE + ALTER + INSERT)
- de serverrol bulkadmin, of de rechten ADMINISTER BULK OPERATIONS
- leesrechten van de SQL Server-service op de map met het CSV-bestand
#>
# --- instellingen ------------------------------------------------
$Server = "localhost\SQLEXPRESS"
$Database = "Adresdata"
$Csv = "C:\data\postcode-zilver-2026-08.csv"
$Table = "dbo.Adressen"
# --- controles ---------------------------------------------------
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Error "Start PowerShell als administrator en probeer opnieuw."
exit 1
}
if (-not (Get-Module -ListAvailable -Name SqlServer)) {
Write-Host "Module SqlServer ontbreekt, wordt geinstalleerd..."
Install-Module -Name SqlServer -Scope AllUsers -Force -AllowClobber
}
Import-Module SqlServer
if (-not (Test-Path $Csv)) { Write-Error "Bestand niet gevonden: $Csv"; exit 1 }
# --- SQL: tabel voor losse adressen -------------------------------
# Zilver bevat elk afzonderlijk adres: ruim 9 miljoen rijen.
# Reserveer vooraf ruimte, anders groeit het bestand tijdens het laden
# in kleine stapjes en duurt de import onnodig lang.
$create = @"
ALTER DATABASE [$Database] MODIFY FILE (NAME = N'$Database', SIZE = 4GB);
ALTER DATABASE [$Database] SET RECOVERY SIMPLE; -- minder logverkeer
IF OBJECT_ID('$Table') IS NOT NULL DROP TABLE $Table;
CREATE TABLE $Table (
PostcodeVolledig char(7) NOT NULL,
PostcodeNummers smallint NOT NULL,
PostcodeLetters char(2) NOT NULL,
Straat nvarchar(80) NOT NULL,
Huisnummer int NOT NULL,
HuisnummerLetter nvarchar(2) NULL,
HuisnummerToevoeging nvarchar(10) NULL,
Plaats nvarchar(80) NOT NULL,
Gemeente nvarchar(80) NOT NULL,
Provincie nvarchar(40) NOT NULL,
Doel nvarchar(60) NULL, -- gebruiksdoel pand
Oppervlakte int NULL,
VerblijfsStatus nvarchar(60) NULL,
PandStatus nvarchar(60) NULL,
Bouwjaar smallint NULL,
Latitude decimal(9,6) NULL,
Longitude decimal(9,6) NULL,
XCoordinaat int NULL,
YCoordinaat int NULL
);
"@
# BATCHSIZE houdt het transactielog klein bij 9 miljoen rijen.
$load = @"
BULK INSERT $Table
FROM '$Csv'
WITH (
FIRSTROW = 2, -- kopregel overslaan
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0d0a', -- CRLF; met 0x0a blijft er een wagenterugloop staan
CODEPAGE = '65001', -- UTF-8
TABLOCK,
BATCHSIZE = 500000
);
"@
# --- SQL: indexen -------------------------------------------------
# Het adres is uniek op postcode + huisnummer + letter + toevoeging.
$index = @"
CREATE CLUSTERED INDEX IX_Adressen_Adres
ON $Table (PostcodeVolledig, Huisnummer, HuisnummerLetter, HuisnummerToevoeging);
CREATE NONCLUSTERED INDEX IX_Adressen_Plaats_Straat
ON $Table (Plaats, Straat, Huisnummer)
INCLUDE (PostcodeVolledig);
CREATE NONCLUSTERED INDEX IX_Adressen_Gemeente
ON $Table (Gemeente) INCLUDE (Plaats, Straat);
"@
# --- 1. tabel aanmaken -------------------------------------------
Write-Host "Tabel aanmaken..."
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $create
# --- 2. bestand laden --------------------------------------------
Write-Host "Bestand laden, dit kan even duren..."
$sw = [Diagnostics.Stopwatch]::StartNew()
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $load -QueryTimeout 0
$sw.Stop()
Write-Host ("Geladen in {0:N0} seconden." -f $sw.Elapsed.TotalSeconds)
# --- 3. indexen zetten -------------------------------------------
# Pas na het laden: dat scheelt bij grote bestanden veel tijd.
Write-Host "Indexen aanmaken..."
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $index -QueryTimeout 0
# --- klaar --------------------------------------------------------
$n = Invoke-Sqlcmd -ServerInstance $Server -Database $Database `
-Query "SELECT COUNT(*) AS Rijen FROM $Table"
Write-Host ("Klaar. {0:N0} rijen in $Table." -f $n.Rijen)
# --- zoeken op postcode en huisnummer ------------------------------
# Zilver kent het adres exact; geen reeksberekening nodig.
#
# SELECT Straat, Plaats, Bouwjaar, Oppervlakte
# FROM dbo.Adressen
# WHERE PostcodeVolledig = '2761 GD' AND Huisnummer = 15;Goud heeft dezelfde tabelstructuur als Zilver, met daarnaast losse selectiebestanden per provincie, gemeente en plaats. Het script laadt eerst het hoofdbestand; onderaan staat een lus waarmee je alle selectiebestanden in een keer inleest.
<#
postcode-import-goud.ps1
Laadt de postcodetabel Goud in SQL Server.
BELANGRIJK — start PowerShell als administrator:
Klik met rechts op Windows PowerShell en kies "Als administrator uitvoeren".
Zonder verhoogde rechten kan SQL Server het CSV-bestand niet openen
en krijg je foutmelding 4861 (Cannot bulk load).
Het account waarmee je verbindt heeft nodig:
- db_owner op de doeldatabase (of CREATE TABLE + ALTER + INSERT)
- de serverrol bulkadmin, of de rechten ADMINISTER BULK OPERATIONS
- leesrechten van de SQL Server-service op de map met het CSV-bestand
#>
# --- instellingen ------------------------------------------------
$Server = "localhost\SQLEXPRESS"
$Database = "Adresdata"
$Csv = "C:\data\postcode-goud-2026-08.csv"
$Table = "dbo.Adressen"
# --- controles ---------------------------------------------------
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Error "Start PowerShell als administrator en probeer opnieuw."
exit 1
}
if (-not (Get-Module -ListAvailable -Name SqlServer)) {
Write-Host "Module SqlServer ontbreekt, wordt geinstalleerd..."
Install-Module -Name SqlServer -Scope AllUsers -Force -AllowClobber
}
Import-Module SqlServer
if (-not (Test-Path $Csv)) { Write-Error "Bestand niet gevonden: $Csv"; exit 1 }
# --- SQL: tabel voor losse adressen -------------------------------
# Goud is Zilver plus kant-en-klare selecties per provincie,
# gemeente en plaats. Die selecties zitten in losse bestanden in
# de ZIP; onderstaand script laadt eerst het hoofdbestand.
$create = @"
ALTER DATABASE [$Database] MODIFY FILE (NAME = N'$Database', SIZE = 4GB);
ALTER DATABASE [$Database] SET RECOVERY SIMPLE;
IF OBJECT_ID('$Table') IS NOT NULL DROP TABLE $Table;
CREATE TABLE $Table (
PostcodeVolledig char(7) NOT NULL,
PostcodeNummers smallint NOT NULL,
PostcodeLetters char(2) NOT NULL,
Straat nvarchar(80) NOT NULL,
Huisnummer int NOT NULL,
HuisnummerLetter nvarchar(2) NULL,
HuisnummerToevoeging nvarchar(10) NULL,
Plaats nvarchar(80) NOT NULL,
Gemeente nvarchar(80) NOT NULL,
Provincie nvarchar(40) NOT NULL,
Doel nvarchar(60) NULL,
Oppervlakte int NULL,
VerblijfsStatus nvarchar(60) NULL,
PandStatus nvarchar(60) NULL,
Bouwjaar smallint NULL,
Latitude decimal(9,6) NULL,
Longitude decimal(9,6) NULL,
XCoordinaat int NULL,
YCoordinaat int NULL
);
"@
$load = @"
BULK INSERT $Table
FROM '$Csv'
WITH (
FIRSTROW = 2, -- kopregel overslaan
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0d0a', -- CRLF; met 0x0a blijft er een wagenterugloop staan
CODEPAGE = '65001', -- UTF-8
TABLOCK,
BATCHSIZE = 500000
);
"@
# --- SQL: indexen -------------------------------------------------
$index = @"
CREATE CLUSTERED INDEX IX_Adressen_Adres
ON $Table (PostcodeVolledig, Huisnummer, HuisnummerLetter, HuisnummerToevoeging);
CREATE NONCLUSTERED INDEX IX_Adressen_Plaats_Straat
ON $Table (Plaats, Straat, Huisnummer) INCLUDE (PostcodeVolledig);
CREATE NONCLUSTERED INDEX IX_Adressen_Provincie
ON $Table (Provincie, Gemeente, Plaats);
"@
# --- 1. tabel aanmaken -------------------------------------------
Write-Host "Tabel aanmaken..."
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $create
# --- 2. bestand laden --------------------------------------------
Write-Host "Bestand laden, dit kan even duren..."
$sw = [Diagnostics.Stopwatch]::StartNew()
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $load -QueryTimeout 0
$sw.Stop()
Write-Host ("Geladen in {0:N0} seconden." -f $sw.Elapsed.TotalSeconds)
# --- 3. indexen zetten -------------------------------------------
# Pas na het laden: dat scheelt bij grote bestanden veel tijd.
Write-Host "Indexen aanmaken..."
Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $index -QueryTimeout 0
# --- klaar --------------------------------------------------------
$n = Invoke-Sqlcmd -ServerInstance $Server -Database $Database `
-Query "SELECT COUNT(*) AS Rijen FROM $Table"
Write-Host ("Klaar. {0:N0} rijen in $Table." -f $n.Rijen)
# --- alle losse selectiebestanden in een keer inlezen --------------
# De ZIP bevat per provincie en per gemeente een apart CSV-bestand.
# Onderstaande lus laadt ze allemaal in dezelfde tabel.
#
# Get-ChildItem "C:\data\selecties\*.csv" | ForEach-Object {
# $f = $_.FullName
# $qry = $load -replace [regex]::Escape($Csv), $f
# Invoke-Sqlcmd -ServerInstance $Server -Database $Database `
# -Query $qry -QueryTimeout 0
# Write-Host "Geladen: $($_.Name)"
# }Voor een terugkerende maandelijkse import, of als je de data onderweg wilt bewerken. Deze handleiding loopt stap voor stap door het bouwen van een SSIS-pakket, inclusief de instellingen die bij Nederlandse adresdata vaak misgaan: code page, rijafsluiting en kolomlengtes.
SSIS-pakket bouwen voor de postcodetabel
========================================
Handig als de import maandelijks automatisch moet draaien, of als je
de data onderweg wilt opschonen of samenvoegen met eigen tabellen.
Voor een eenmalige import is het PowerShell-script sneller klaar.
Benodigd
--------
- SQL Server Data Tools (SSDT) in Visual Studio, of
Visual Studio 2022 met de extensie "SQL Server Integration
Services Projects" (gratis)
- Een account met db_owner op de doeldatabase
1. Nieuw project
----------------
Visual Studio > Create a new project > Integration Services Project
Naam: PostcodeImport
2. Connection managers aanmaken
-------------------------------
Rechtermuisknop in het vak Connection Managers onderin.
a) Flat File Connection Manager - naam: CSV_Postcode
General:
File name C:\data\postcode-zilver-2026-08.csv
Locale Dutch (Netherlands)
Unicode uit
Code page 65001 (UTF-8) <-- belangrijk
Format Delimited
Text qualifier " (dubbele quote)
Column names in the first data row AAN
Columns:
Row delimiter {CR}{LF}
Column delimiter Semicolon {;}
Advanced: klik op "Suggest Types" en corrigeer daarna handmatig.
SSIS raadt te krappe types; zet ze op:
PostcodeVolledig string [DT_STR] lengte 7
PostcodeNummers two-byte signed integer [DT_I2]
PostcodeLetters string [DT_STR] lengte 2
Straat Unicode string [DT_WSTR] lengte 80
Huisnummer four-byte signed integer [DT_I4]
HuisnummerLetter Unicode string [DT_WSTR] lengte 2
HuisnummerToevoeging Unicode string [DT_WSTR] lengte 10
Plaats / Gemeente Unicode string [DT_WSTR] lengte 80
Provincie Unicode string [DT_WSTR] lengte 40
Latitude / Longitude numeric [DT_NUMERIC] precisie 9, schaal 6
b) OLE DB Connection Manager - naam: DB_Adresdata
Server: localhost\SQLEXPRESS Database: Adresdata
Provider: Native OLE DB\SQL Server Native Client
3. Control Flow: Execute SQL Task
---------------------------------
Sleep een Execute SQL Task naar het Control Flow-vlak.
Naam: 01 - Tabel klaarzetten
Connection: DB_Adresdata
SQLStatement:
IF OBJECT_ID(N'dbo.Adressen') IS NULL
CREATE TABLE dbo.Adressen (
PostcodeVolledig char(7) NOT NULL,
/* ... zelfde kolommen als in het PowerShell-script ... */
);
ELSE
BEGIN
DROP INDEX IF EXISTS IX_Adressen_Adres ON dbo.Adressen;
TRUNCATE TABLE dbo.Adressen;
END
4. Control Flow: Data Flow Task
-------------------------------
Sleep een Data Flow Task eronder. Naam: 02 - Laden
Verbind de groene pijl van taak 01 naar taak 02.
Dubbelklik om het Data Flow-tabblad te openen.
a) Flat File Source
Connection manager: CSV_Postcode
Vink "Retain null values from the source as null values" AAN,
anders wordt een lege toevoeging een lege string in plaats
van NULL.
b) OLE DB Destination
Connection manager: DB_Adresdata
Data access mode: Table or view - fast load
Name of the table: dbo.Adressen
Rows per batch: 100000
Maximum insert commit size: 500000
Vink AAN: Table lock
Vink UIT: Check constraints
Tabblad Mappings: controleer of alle kolommen gekoppeld zijn.
Bij een naamsverschil sleep je de lijnen handmatig.
5. Indexen na afloop
--------------------
Voeg een tweede Execute SQL Task toe onder de Data Flow.
Naam: 03 - Indexen
SQLStatement:
CREATE CLUSTERED INDEX IX_Adressen_Adres
ON dbo.Adressen (PostcodeVolledig, Huisnummer,
HuisnummerLetter, HuisnummerToevoeging);
De index wordt in taak 01 verwijderd voordat de data binnenkomt.
Laden met bestaande indexen duurt bij 9 miljoen rijen veel langer.
6. Verschil per pakket
----------------------
Brons andere kolommen: HuisnummerRangeStart, HuisnummerRangeEind
en Reeksindicatie in plaats van Huisnummer. Maak hiervoor
een aparte Flat File Connection Manager; de kolomdefinitie
van Zilver kun je niet hergebruiken.
Zilver zoals hierboven beschreven.
Goud zelfde structuur als Zilver. Voor de losse selectiebestanden
gebruik je een Foreach Loop Container over de map met
selecties, met een variabele die de Flat File-connectie
aanstuurt via Expressions > ConnectionString.
7. Maandelijks laten draaien
----------------------------
Project > Deploy naar de SSIS Catalog (SSISDB) op de server.
Daarna in SQL Server Agent een job aanmaken:
Step type: SQL Server Integration Services Package
Package source: SSIS Catalog
Schedule: maandelijks op de 12e, na onze publicatie rond de 10e.
Het account waaronder SQL Server Agent draait moet leesrechten
hebben op de map met het CSV-bestand.
Veelvoorkomende fouten
----------------------
"The value could not be converted because of a potential loss
of data"
Kolomlengte in de Flat File Connection Manager te krap.
Verhoog de OutputColumnWidth onder Advanced.
Vreemde tekens in straatnamen
Code page staat niet op 65001. Corrigeer dat en bouw de
kolomdefinitie opnieuw op met Suggest Types.
Elke regel eindigt met een spookteken
Row delimiter staat op {LF} terwijl het bestand {CR}{LF}
gebruikt.Vragen over de installatie
Ja, bij BULK INSERT wel. De SQL Server-service opent het bestand zelf en zonder verhoogde rechten loop je tegen foutmelding 4861 aan: Cannot bulk load because the file could not be opened. Klik met rechts op Windows PowerShell en kies "Als administrator uitvoeren".
Op de doeldatabase db_owner, of minimaal CREATE TABLE, ALTER en INSERT. Op serverniveau de rol bulkadmin, oftewel het recht ADMINISTER BULK OPERATIONS. Zonder dat laatste kan het account geen BULK INSERT uitvoeren, ook niet als het db_owner is.
Dan kan de SQL Server-service het bestand niet lezen. Drie dingen om te controleren: draait PowerShell als administrator, staat het bestand op een schijf waar de server bij kan (een netwerkschijf van jouw werkplek telt niet mee), en heeft het serviceaccount van SQL Server leesrechten op die map.
Andere kolommen en een andere index. Brons bevat postcodes met een huisnummerreeks, dus een begin- en eindhuisnummer per rij; je zoekt daarin met BETWEEN. Zilver bevat elk afzonderlijk adres, met huisnummer, letter en toevoeging als aparte kolommen, en pandgegevens erbij. Het Zilver-script zet de database vooraf op SIMPLE recovery en reserveert ruimte, omdat het om ruim 9 miljoen rijen gaat.
Brons is binnen een halve minuut klaar. Zilver en Goud duren op een gemiddelde server vijf tot vijftien minuten, waarvan het grootste deel opgaat aan het opbouwen van de indexen. Het script zet de indexen daarom bewust pas na het laden.
Open het bestand niet met dubbelklikken maar via Gegevens, Uit tekst/CSV. Zet daar de kolom PostcodeVolledig op gegevenstype Tekst voordat je laadt. Let op: Excel stopt bij ruim een miljoen rijen, dus Zilver en Goud passen er sowieso niet in.
UTF-8, codepage 65001, met de puntkomma als scheidingsteken en een kopregel als eerste rij. Vergeet bij SSIS de rijafsluiting niet: die is {CR}{LF}.
Ja. Zet het PowerShell-script in de Windows-taakplanner of als SQL Agent-job, en laat het de nieuwste download ophalen. Voor een import waarin je de data onderweg wilt bewerken is SSIS handiger; die handleiding staat hierboven onder het tabblad SSIS.
Grotendeels. BULK INSERT vanaf een lokaal pad werkt daar niet; gebruik in plaats daarvan BULK INSERT vanaf een Azure Blob Storage-container met een SAS-token, of laad het bestand met bcp. De tabeldefinities en indexen kun je ongewijzigd overnemen.
Andere vragen over bestellen, licenties of downloads? Die staan op de helppagina.
