Dela via


Importera data från Excel till SQL Server eller Azure SQL Database

gäller för:SQL ServerAzure SQL Database

Det finns flera sätt att importera data från Excel-filer till SQL Server eller till Azure SQL Database. Med vissa metoder kan du importera data i ett enda steg direkt från Excel-filer. Andra metoder kräver att du exporterar dina Excel-data som text (CSV-fil) innan du kan importera dem.

Den här artikeln sammanfattar de metoder som används ofta och innehåller länkar för mer detaljerad information. En fullständig beskrivning av komplexa verktyg och tjänster som SSIS eller Azure Data Factory ligger utanför den här artikelns omfång. Mer information om lösningen som intresserar dig finns i länkarna.

Lista över metoder

Det finns flera sätt att importera data från Excel. Du måste installera SQL Server Management Studio (SSMS) för att kunna använda några av dessa verktyg.

Du kan använda följande verktyg för att importera data från Excel:

Exportera till text först (SQL Server och Azure SQL Database) Direkt från Excel (endast lokalt SQL Server)
Guider för import av flatfiler SQL Server-guiden för import och export
BULK INSERT--instruktion SQL Server Integration Services (SSIS)
Masskopieringsverktyg (bcp) OPENROWSET-funktionen
Kopieringsguide (Azure Data Factory)
Azure Data Factory

Om du vill importera flera kalkylblad från en Excel-arbetsbok måste du vanligtvis köra något av dessa verktyg en gång för varje blad.

Mer information finns i begränsningar och kända problem med att läsa in data till eller från Excel-filer.

Guiden Importera och exportera

Importera data direkt från Excel-filer med hjälp av guiden Importera och exportera SQL Server. Du kan också spara inställningarna som ett SQL Server Integration Services-paket (SSIS) som du kan anpassa och återanvända senare.

  1. I SQL Server Management Studio ansluter du till en instans av SQL Server Database Engine.

  2. Expandera Databaser.

  3. Högerklicka på en databas.

  4. Välj Uppgifter.

  5. Välj att Importera data eller Exportera data:

    Skärmbild av startguiden SSMS.

Detta startar guiden:

Skärmbild av Anslut till en Excel-datakälla.

Mer information finns i följande artiklar:

Integration Services (SSIS)

Om du är bekant med SQL Server Integration Services (SSIS) och inte vill köra guiden IMPORTERA och exportera SQL Server kan du skapa ett SSIS-paket som använder Excel-källan och SQL Server-målet i dataflödet i stället.

Mer information finns i följande artiklar:

För att börja lära dig hur du bygger SSIS-paket, se självstudien How to Create an ETL Package.

Skärmbild av komponenter i dataflödet.

OPENROWSET och länkade servrar

Viktig

I Azure SQL Database kan du inte importera direkt från Excel. Du måste först exportera data till en textfil (CSV).

I följande exempel används JET-providern eftersom ACE-providern som ingår i Office och som ansluter till Excel-datakällor är avsedd för interaktiv användning på klientsidan.

Distribuerade frågor

Importera data direkt till SQL Server från Excel-filer med hjälp av funktionen Transact-SQL OPENROWSET eller OPENDATASOURCE. Den här användningen kallas för en distribuerad fråga.

Viktig

I Azure SQL Database kan du inte importera direkt från Excel. Du måste först exportera data till en textfil (CSV).

Innan du kan köra en distribuerad fråga måste du aktivera konfigurationsalternativet Ad Hoc Distributed Queries server, som du ser i följande exempel. Mer information finns i Server-konfiguration: Ad Hoc-distribuerade frågor.

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

I följande kodexempel används OPENROWSET för att importera data från Excel-Sheet1 kalkylbladet till en ny databastabell.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.JET.OLEDB.4.0',
    'Excel 8.0; Database=C:\Temp\Data.xls', [Sheet1$]);
GO

Här är samma exempel med OPENDATASOURCE.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
    'Data Source=C:\Temp\Data.xls;Extended Properties=Excel 8.0')...[Sheet1$];
GO

Om du vill lägga till importerade data i en befintlig tabell i stället för att skapa en ny tabell använder du syntaxen INSERT INTO ... SELECT ... FROM ... i stället för den SELECT ... INTO ... FROM ... syntax som används i föregående exempel.

Om du vill köra frågor mot Excel-data utan att importera dem använder du bara standardsyntaxen för SELECT ... FROM ....

Mer information om distribuerade frågor finns i följande artiklar:

1 Distribuerade frågor stöds fortfarande i SQL Server, men dokumentationen för den här funktionen uppdateras inte.

Länkade servrar

Du kan också konfigurera en beständig anslutning från SQL Server till Excel-filen som en länkad server. I följande exempel importeras data från kalkylbladet Data på den befintliga Länkade Excel-servern EXCELLINK till en ny SQL Server-databastabell med namnet Data_ls.

USE ImportFromExcel;
GO
SELECT * INTO Data_ls FROM EXCELLINK...[Data$];
GO

Du kan skapa en länkad server från SQL Server Management Studio (SSMS) eller genom att köra den system lagrade proceduren sp_addlinkedserver, som du ser i följande exempel.

DECLARE @RC INT;
DECLARE @server NVARCHAR(128);
DECLARE @srvproduct NVARCHAR(128);
DECLARE @provider NVARCHAR(128);
DECLARE @datasrc NVARCHAR(4000);
DECLARE @location NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @catalog NVARCHAR(128);

-- Set parameter values
SET @server = 'EXCELLINK';
SET @srvproduct = 'Excel';
SET @provider = 'Microsoft.JET.OLEDB.4.0';
SET @datasrc = 'C:\Temp\Data.xls';
SET @provstr = 'Excel 8.0';

EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,
    @srvproduct,
    @provider,
    @datasrc,
    @location,
    @provstr,
    @catalog;

Mer information om länkade servrar finns i följande artiklar:

Fler exempel och information om både länkade servrar och distribuerade frågor finns i följande artikel:

Förutsättningar

Om du vill använda resten av metoderna som beskrivs på den här sidan (instruktionen BULK INSERT, bcp eller Azure Data Factory) måste du först exportera dina Excel-data till en textfil.

Spara Excel-data som text

I Excel väljer du Fil | Spara som och välj sedan text (tabbavgränsad) (*.txt) eller CSV (kommaavgränsad) (*.csv) som målfiltyp.

Om du vill exportera flera kalkylblad från arbetsboken väljer du varje blad och upprepar sedan den här proceduren. Kommandot Spara som exporterar endast det aktiva bladet.

Tips

För bästa resultat med dataimportverktyg sparar du blad som endast innehåller kolumnrubrikerna och dataraderna. Om de sparade data innehåller sidrubriker, tomma rader, anteckningar och så vidare kan du se oväntade resultat senare när du importerar data.

Guida för import av flatfiler

Importera data som sparats som textfiler genom att gå igenom sidorna i Importera flatfil-guiden.

Som du beskrev tidigare i avsnittet Krav måste du exportera dina Excel-data som text innan du kan använda guiden Importera flat fil för att importera dem.

Mer information om guiden Importera flat fil finns i Importera flat fil till SQL-guiden.

BULK INSERT-kommando

BULK INSERT är ett Transact-SQL kommando som du kan köra från SQL Server Management Studio. I följande exempel läses data från den Data.csv kommaavgränsade filen in i en befintlig databastabell.

Som du beskrev tidigare i avsnittet Krav måste du exportera dina Excel-data som text innan du kan använda BULK INSERT för att importera dem. BULK INSERT kan inte läsa Excel-filer direkt. Med kommandot BULK INSERT kan du importera en CSV-fil som lagras lokalt eller i Azure Blob Storage.

USE ImportFromExcel;
GO
BULK INSERT Data_bi FROM 'C:\Temp\data.csv'
   WITH (
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO

Mer information och exempel för SQL Server och Azure SQL Database finns i följande artiklar:

Masskopieringsverktyget (bcp)

Verktyget bcp körs från kommandotolken. I följande exempel läses data från den Data.csv kommaavgränsade filen in i den befintliga Data_bcp databastabellen.

Som du beskrev tidigare i avsnittet Förutsättningar måste du exportera dina Excel-data som text innan du kan använda bcp för att importera dem. Verktyget bcp kan inte läsa Excel-filer direkt. Använd för att importera till SQL Server eller SQL Database från en testfil (CSV) som sparats till lokal lagring.

Viktig

För en textfil (CSV) som lagras i Azure Blob Storage använder du BULK INSERT eller OPENROWSET. Ett exempel finns i Använda BULK INSERT eller OPENROWSET(BULK...) för att importera data till SQL Server.

bcp.exe ImportFromExcel..Data_bcp in "C:\Temp\data.csv" -T -c -t ,

Mer information om bcpfinns i följande artiklar:

Kopieringsassistent (ADF)

Importera data som sparats som textfiler genom att steg för steg gå igenom sidorna i Azure Data Factory Kopieringsassistent (ADF).

Som du beskrev tidigare i avsnittet Krav måste du exportera dina Excel-data som text innan du kan använda Azure Data Factory för att importera dem. Data Factory kan inte läsa Excel-filer direkt.

Mer information om kopieringsguiden finns i följande artiklar:

Azure Data Factory

Om du är bekant med Azure Data Factory och inte vill köra kopieringsguiden skapar du en pipeline med en kopieringsaktivitet som kopierar från textfilen till SQL Server eller Till Azure SQL Database.

Som du beskrev tidigare i avsnittet Krav måste du exportera dina Excel-data som text innan du kan använda Azure Data Factory för att importera dem. Data Factory kan inte läsa Excel-filer direkt.

Mer information om hur du använder dessa Data Factory-källor och -mottagare finns i följande artiklar:

Information om hur du kopierar data med Azure Data Factory finns i följande artiklar: