Når du arbejder som SQL Server-databaseadministrator eller -udvikler, kan du ikke leve i din isolerede SQL Server-verden uden at kommunikere med andre datakilder. For eksempel er der sjældent en dag, hvor du ikke bliver bedt om at importere data fra en Excel-, Access- eller CSV-fil til din SQL Server-tabel. Eller omvendt eksporter en af dine SQL Server-databasetabeller til en ekstern fil, for at denne tabel kan bruges i en anden databasemotor eller analyseres eksternt af det tilsvarende team.
SQL Server giver os en række metoder, der kan bruges til at eksportere en eksisterende SQL Server-databasetabel til en Excel- eller tekstfil og importere data fra en ekstern datakilde til en ny eller eksisterende SQL Server-databasetabel. I denne artikel vil vi gradvist dække alle disse metoder.
BCP Utility
Bulk Copy Program-værktøjet, også kendt som BCP, er et kommandolinjeværktøj, der kan bruges til at importere et stort antal rækker fra en operativsystemdatafil til din SQL Server-databasetabel eller eksportere en eksisterende SQL Server-databasetabel til en operationel systemdatafil.
BCP-værktøjets syntaks indeholder en lang række muligheder. Disse er de mest brugte:
- Navnet på SQL Server-databasetabellen eller -visningen – dette vil fungere som datakilde i tilfælde af dataeksportproces og som destination i tilfælde af dataimportproces.
- Dataretningen, hvor IN angiver dataimport og OUT angiver dataeksport.
- Navnet på den lokale datafil, der vil fungere som kilde i tilfælde af dataimportproces og som destination i tilfælde af dataeksportproces.
- -S server\instans – dette bruges til at angive navnet på SQL Server-instansen.
- –d – dette bruges til at angive den database, der indeholder kilde- eller destinationstabellen.
- -T – dette bruges til at angive, at Windows-godkendelse vil blive brugt til at oprette forbindelse til SQL-serveren.
- -U brugernavn og -P adgangskode – disse angiver brugernavnet og adgangskoden, der bruges til at oprette forbindelse til SQL Server-instansen.
- Bulk Copy Program-værktøjet, også kendt som BCP, er et kommandolinjeværktøj, der kan bruges til at importere et stort antal rækker fra en operativsystemdatafil til din SQL Server-databasetabel eller eksportere en eksisterende SQL Server-databasetabel til en operativsystemdatafil. – disse bruges til at angive formatet for kilde- eller destinationsdatafilen og afgrænsningstegn, der bruges i denne datafil.
For eksempel bruges BCP-kommandoen nedenfor til at eksportere indholdet af Employee_Main-databasetabellen i bulks til en CSV-fil, som følger:
bcp AdventureWorks2016CTP3.dbo.Employee_Main out C:\Test\Employees.csv -S MININT-QQBE87A -T -c -t , -r \n
Disse data vil hurtigt blive kopieret til en CSV-fil, som vist i resultatet nedenfor:
For at importere indholdet af en CSV-fil til en databasetabel, kan følgende BCP-kommando bruges til at opnå dette hurtigt i bulks:
bcp AdventureWorks.dbo.Employee_Main i C:\Test\Employees.csv -S MININT-QQBE87A -T -c -t , -r \n
Og dataene vil blive indsat i databasetabellen, som vist i resultatet nedenfor:
Ved at bruge et par minutter på at forberede disse kommandoer med de rigtige muligheder, kan du nemt bruge BCP-værktøjet til at importere data fra eller eksportere det til tekstdatafiler.
BULKINDSÆTNING
BULK INSERT T-SQL sætningen fungerer på samme måde som BCP IN kommandoen og bruges til at importere data fra en datafil, der er tilgængelig for SQL Server-tjenesten, til en SQL Server-databasetabel - alt sammen udført direkte i SQL Server. I modsætning til BCP IN-kommandoen kan BULK INSERT-sætningen grupperes med andre operationer i en enkelt SQL Server-transaktion, der kører under din kontrol.
BULK INSERT T-SQL-sætningen nedenfor kan bruges til at importere data fra en CSV-fil til en eksisterende databasetabel, med angivelse af både kolonne- og rækkeskilletegn, som vist nedenfor:
BULK INSERT AdventureWorks.dbo.Employee_Main FROM 'C:\Test\Employees.csv' WITH ( FIELDTERMINATOR =',', ROWTERMINATOR ='\n' ); GO
ÅBN ROWSET
OPENROWSET-funktionen bruges til at oprette forbindelse til datakilder ved hjælp af en OLEDB-forbindelsesudbyder og derefter bruge den specificerede T-SQL-forespørgsel til at hente data fra denne datakilde. De vigtigste fordele ved OPENROWSET-funktionen i forhold til BCP- og BULK INSERT-metoderne er følgende:
- du kan filtrere de data, der hentes af OPENROWSET-sætningen ved hjælp af en WHERE-sætning
- du kan bruge det i en SELECT-sætning til at læse data fra datakilden – ikke kun med INSERT-sætningen
For at bruge OPENROWSET-sætningen skal du aktivere ad hoc-distribuerede forespørgsler systemkonfigurationsmulighed først ved at bruge scriptet nedenfor:
sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO
Efter at have aktiveret systemkonfigurationsmuligheden for ad hoc distribuerede forespørgsler, kan du bruge OPENROWSET-funktionen til at importere data til SQL Server-databasetabeller fra CSV-filer med et tidligere defineret dataformat, som vist i T-SQL-forespørgslen nedenfor:
INSERT INTO [AdventureWorks].[dbo].[Employee_Main] ([EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber]) SELECT [EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber] FROM OPENROWSET( BULK 'C:\Test\Employees.csv', FORMATFILE = 'C:\Test\Fmt.xml' ) AS rows;
Linket server
SQL Server Linked Server er et serverobjekt, der er konfigureret til at tillade SQL Server Database Engine at oprette forbindelse til forskellige typer OLE DB-datakilder uden for SQL Server-instansen. Den sammenkædede server kan nemt oprettes ved hjælp af SQL Server Management Studio eller T-SQL-kommandoer, som vist nedenfor:
Når den er oprettet, kan den sammenkædede server nemt bruges til at få adgang til den eksterne datakilde og importere de tilsvarende data til SQL Server-databasetabellen som vist i T-SQL-forespørgslen nedenfor:
INSERT INTO [AdventureWorks].[dbo].[Employee_Main] ([EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber],[EMP_Address]) SELECT [EMP_FirsrName],[EMP_LastName],[EMP_BirthDate],[EMP_PhoneNumber],[EMP_Address] FROM TEST...Employee_Main$
SQL Server Eksport/Import Wizard
SQL Server Export and Import Wizard giver os en enkel grænseflade til at skabe SQL Server Integration Service-pakker, som kan bruges med det samme eller gemmes til senere brug. Disse pakker gør det muligt at importere data fra og eksportere dem til en lang række datakilder, startende fra simple flade filer og slutter med mere komplekse databasemotorer.
Eksport- og importguiden kan f.eks. bruges til at importere data fra en Excel-datakilde til en eksisterende databasetabel. Følgende trin beskriver denne proces:
- I SQL Server Management Studios Object Explorer skal du højreklikke på AdventureWorks-databasen, der indeholder tabellen, som du vil skrive dataene til. Vælg derefter Importer data mulighed fra Opgaver undermenu:
- SQL Server Import og Export Wizard vil blive åbnet. I Vælg en datakilde vindue, skal du angive typen af datakilden. I dette særlige eksempel vil vi vælge Microsoft Excel og den fulde sti til den ønskede Excel-fil. Når du har angivet det, skal du klikke på Næste knap:
- I Vælg en destination vindue, vil du blive bedt om at angive den type destination, som kildedataene skal skrives til. I vores eksempel er det SQL Server-database. Du vil også blive bedt om at angive servernavnet, legitimationsoplysninger og navnet på databasen, hvori destinationstabellen er placeret. Når du har angivet alle disse oplysninger, skal du klikke på Næste at fortsætte:
- I Angiv tabelkopi eller -forespørgsel vindue, vil du have en mulighed for enten at kopiere alle data fra kilden til en eksisterende eller ny tabel, eller skrive en tilpasset forespørgsel for at hente en bestemt række af data. Når dette er besluttet, skal du klikke på Næste knap:
- I Vælg kildetabeller og visninger vindue, skal du angive kildearket eller tabellen fra datakilden og destinationstabellen, som kildedataene vil blive skrevet til. Du vil have mulighed for at forhåndsvise kilden, kontrollere tilknytningen af kolonnerne mellem kilde- og destinationstabellerne og angive, om dataene skal tilføjes til en eksisterende tabel eller til en nyligt genereret tabel. Klik på Næste knap for at fortsætte:
- I pakken Gem og kør Window, har du mulighed for at gemme SSIS-pakken, der er oprettet i import- og eksportguiden for at køre den med det samme eller gemme den til planlægning eller køre den senere. Klik på Næste knap for at fortsætte:
- I Fuldfør guiden vindue, vil du se en oversigt over de valgte muligheder og angivne indstillinger. Klik på Udfør knappen for at begynde at kopiere dataene:
- Når kopieringsprocessen er fuldført, viser guiden antallet af poster, der er kopieret til hver tabel. Hvis der ikke er nogen fejl, kan du klikke på Luk knap for at lukke vinduet:Du kan se fra det forrige eksempel, at import- og eksportguiden nemt kan bruges til at kopiere data mellem forskellige typer af datakilder og destinationer, uden at tage hensyn til forholdet mellem tabellerne. Hvis tabellen har en Foreign Key-begrænsning, der refererer til en af kolonnerne i den overordnede tabel, skal du administrere rækkefølgen af datakopieringsprocessen manuelt. For at starte en ny dataimportproces skal du desuden lukke guiden og åbne den igen.
dbForge-datapumpe
dbForge Data Pump er et tredjepartsværktøj, der følger med SQL Server Management Studio som et tilføjelsesprogram. Det kan bruges til nemt at migrere data mellem SQL Server og forskellige eksterne datakilder. Det giver dig mulighed for at importere og eksportere fra 10+ almindeligt anvendte dataformater (tekst, MS Excel, XML, CSV, JSON osv.) med en række avancerede muligheder og skabeloner, der kan bruges til tilbagevendende scenarier.
Efter at have downloadet dbForge Data Pump fra Devart-downloadsiden, skal du installere den på maskinen som et SSMS-værktøj-tilføjelsesprogram, som vist nedenfor:
Dataeksport
dbForge Data Pump kan bruges i SSMS til at eksportere data fra en SQL Server-databasetabel eller til at se data i 13 understøttede typer formater, herunder HTML, Tekst, MS Excel, MS Excel 2007, MS Access, RTF, PDF, XML, CSV, ODBC, DBF (Foxpro, dBase III, dBase IV, dBase 7), SQL og JSON.
Følg nedenstående trin for at eksportere data fra en specifik SQL Server-tabel:
- Opret forbindelse til SQL Server-instansen via SSMS. Højreklik på databasen, der indeholder kildetabellen i Objekt Explorer, og vælg Eksporter data fra Datapumpen undermenu:
- I Eksportformat vinduet, vælg formatet på den fil, som kildetabeldataene skal eksporteres til, eller indlæs en tidligere gemt skabelon. I vores eksempel vil vi vælge MS Excel 2007. Klik på Næste knap for at fortsætte:
- I kildevinduet skal du gennemgå forbindelsesdetaljerne og vælge den eller de tabeller, der indeholder kildedataene, der skal eksporteres. Klik på Næste at fortsætte:
- I Indstillinger vindue, skal du kontrollere og indstille de forskellige tilpasningsmuligheder for de eksporterede datas tabelgitter. Klik derefter på Næste at fortsætte:
- I Dataformater vinduet under Kolonner fanen, skal du vælge de kolonner, der vil blive eksporteret, og gennemgå deres datatyper:Også i Formater fanen, skal du konfigurere formatet for forskellige datatyper for de kolonner, du har valgt. Klik på Næste knap for at fortsætte:
- I Indstillinger for sideudskrivning vindue, kan du indstille de forskellige muligheder for de eksporterede filsider til udskrivningsformål. Klik på Næste at fortsætte:
- I Eksporterede rækker vindue, skal du angive en række rækker, der skal eksporteres fra kildetabellen, eller vælge at eksportere alle tabelrækker. Klik på Næste at fortsætte:
- Fejlhåndteringen vinduet giver dig en række muligheder, der kan bruges til at specificere, hvordan fejl skal behandles, hvis de opstår, og hvor udførelsesresultaterne skal logges. Klik på Gem skabelon for at gemme indstillingerne som en skabelon, der skal bruges i fremtiden, eller tryk på Eksporter knappen for at starte dataeksportprocessen, som vist nedenfor:Under dataeksportprocessen vil Data Pump give dig informationsmeddelelser, der viser antallet af poster kopieret fra aktuelle tabel, som vist nedenfor:Når dataeksportprocessen er gennemført, vises en oversigt over eksportprocessen. Der vil blive givet muligheder for at åbne den genererede fil eller den indeholdende mappe og eksportere flere data fra samme side uden at skulle lukke og genåbne værktøjet:
Dataimport
dbForge Data Pump kan bruges i SSMS til at importere data til en SQL Server-databasetabel. Følgende 9 udbredte dataformater understøttes:Tekst, MS Excel, MS Excel 2007, MS Access, XML, CSV, ODBC, DBF (Foxpro, dBase III, dBase IV, dBase 7) og JSON.
Følg nedenstående trin for at importere data fra et Excel-ark til en specifik SQL Server-tabel:
- Opret forbindelse til SQL Server-instansen ved hjælp af SSMS. Højreklik på den database, der indeholder destinationsdatabasetabellen i Objekt Explorer, og vælg Importer Data fra datapumpen undermenu:
- I Kildefilen vindue, skal du vælge formatet på kildefilen eller blot indlæse en tidligere gemt skabelon for at udføre importprocessen. I vores eksempel vil vi bruge Microsoft Excel 2007 og klikke på Gennemse knappen for at finde Excel-arket. Klik på Næste knap for at fortsætte:
- I destinationen vindue, gennemgå forbindelsesoplysningerne og angive, om dataene skal importeres til en ny tabel eller en eksisterende tabel fra den angivne liste. Klik på Næste at fortsætte:
- I Indstillinger vindue, kan du indstille forskellige indstillinger, der angiver placeringen af overskriften og dataene i kildefilen, med mulighed for at få vist kildefilens data før import. Klik på Næste at fortsætte:
- I Dataformater vindue, kan du justere datatypeformatet for forskellige tekstkolonner i kildefilen, før du importerer den til databasetabellen. Klik på Næste at fortsætte:
- I Mapping vindue, kan du kortlægge kolonnerne fra kildefilen til destinationsdatabasetabellen med mulighed for at få vist dataene efter at have udført ændringen. Klik på Næste at fortsætte:
- I Tilstande vindue, kan du angive dataimporttilstanden, såsom at tilføje data til de eksisterende data i destinationstabellen og udføre en masseindsættelse eller importere dataene med en enkelt transaktion. Klik på Næste at fortsætte:
- I Output vindue, kan du angive at generere eller gemme dataimportscriptet eller fortsætte med dataimportprocessen med det samme. Klik på Næste at fortsætte:
- Fejlhåndteringen vinduet giver dig en række muligheder, der kan bruges til at specificere, hvordan du skal opføre dig, hvis der opstår fejl, og hvor du skal logge udførelsesresultaterne. Klik på Gem skabelon for at gemme indstillingerne som en skabelon, der skal bruges i fremtiden, eller Import knappen for at starte dataimportprocessen, som vist nedenfor:
- Når importprocessen er gennemført, viser guiden en oversigt over antallet af importerede poster. Du vil have mulighed for at gennemgå fejllogfilen, hvis der opstår fejl, og at importere andre filer fra samme vindue uden at skulle lukke og genåbne værktøjet:
Det fremgår tydeligt af det foregående eksempel, at dbForge Data Pump-værktøjet giver os mulighed for at importere og eksportere data til og fra forskellige datafilformater. Guiden dedikeret til dette er enkel at konfigurere, rig på forskellige muligheder og kræver ingen udviklingsindsats. Det fortjener et forsøg!