Dela via


Ladda filer i FileTables

gäller för:SQL Server

Beskriver hur du läser in eller migrerar filer till FileTables.

Läsa in eller migrera filer till en FileTable

Vilken metod du väljer för att läsa in eller migrera filer till en FileTable beror på var filerna lagras för närvarande.

Aktuell plats för filer Alternativ för migrering
Filer lagras för närvarande i filsystemet.

SQL Server har ingen kunskap om filerna.
Eftersom en FileTable visas som en mapp i Windows-filsystemet kan du enkelt läsa in filer i en ny FileTable med någon av de tillgängliga metoderna för att flytta eller kopiera filer. Dessa metoder omfattar Utforskaren i Windows, kommandoradsalternativ som xcopy- och robocopyoch anpassade skript eller program.

Du kan inte konvertera en befintlig mapp till en FileTable.
Filer lagras för närvarande i filsystemet.

SQL Server innehåller en tabell med metadata som innehåller pekare till filerna.
Det första steget är att flytta eller kopiera filerna med någon av ovanstående metoder.

Det andra steget är att uppdatera den befintliga tabellen med metadata så att den pekar på den nya platsen för filerna.

Mer information finns i Exempel: Migrera filer från filsystemet till en FileTable- i den här artikeln.

Så här: Läsa in filer i en FileTable

Du kan använda följande metoder för att läsa in filer i en FileTable:

  • Dra och släpp filer från källmapparna till den nya mappen FileTable i Utforskaren.

  • Använd kommandoradsalternativ som move, copy, xcopyeller robocopy från kommandotolken eller i en batchfil eller ett skript.

  • Skriv ett anpassat program för att flytta eller kopiera filerna i C# eller Visual Basic .NET. Anropa metoder från System.IO namnrymd.

Exempel: Migrera filer från filsystemet till en FileTable

I det här scenariot lagras dina filer i filsystemet och du har en tabell med metadata i SQL Server som innehåller pekare till filerna. Du vill flytta filerna till en FileTable och sedan ersätta den ursprungliga UNC-sökvägen för varje fil i metadata med FileTable UNC-sökvägen. Funktionen GetPathLocator hjälper dig att uppnå det här målet.

Anta i det här exemplet att det finns en befintlig databastabell, PhotoMetadata, som innehåller data om fotografier. Den här tabellen har en kolumn UNCPath av typen varchar(512) som innehåller den faktiska UNC-sökvägen till en .jpg fil.

Om du vill migrera avbildningsfilerna från filsystemet till en FileTable måste du göra följande:

  1. Skapa en ny FileTable för att lagra filerna. Det här exemplet använder tabellnamnet dbo.PhotoTable, men visar inte koden för att skapa tabellen.

  2. Använd xcopy eller ett liknande verktyg för att kopiera .jpg-filerna, med deras katalogstruktur, till rotkatalogen i FileTable.

  3. Åtgärda metadata i tabellen PhotoMetadata med hjälp av kod som liknar följande exempel:

--  Add a path locator column to the PhotoMetadata table.
ALTER TABLE PhotoMetadata ADD pathlocator HIERARCHYID;

-- Get the root path of the Photo directory on the File Server.
DECLARE @UNCPathRoot VARCHAR(100) = '\\RemoteShare\Photographs';

-- Get the root path of the FileTable.
DECLARE @FileTableRoot VARCHAR(1000);

SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');

-- Update the PhotoMetadata table.
-- Replace the File Server UNC path with the FileTable path.
UPDATE PhotoMetadata
SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);

-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.
UPDATE PhotoMetadata
SET pathlocator = GetPathLocator(UNCPath);

Massinläsning av filer i en FileTable

En FileTable fungerar som en normal tabell för massoperationer. En FileTable har systemdefinierade begränsningar som säkerställer att fil- och katalognamnområdets integritet upprätthålls. Dessa begränsningar måste verifieras på de data som massinlästs i FileTable. Eftersom vissa massinfogningsåtgärder tillåter att tabellbegränsningar ignoreras tillämpas följande krav.

  • Massinläsningsåtgärder som framtvingar begränsningar kan köras mot en FileTable som mot andra tabeller. Den här kategorin innehåller följande åtgärder:

    • bcp med CHECK_CONSTRAINTS-klausul.
    • BULK INSERT med CHECK_CONSTRAINTS klausul.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) utan IGNORE_CONSTRAINTS-sats.
  • Massinläsningsåtgärder som inte framtvingar begränsningar misslyckas om inte systemdefinierade begränsningar för FileTable inaktiveras. Den här kategorin innehåller följande åtgärder:

    • bcp utan CHECK_CONSTRAINTS-sats.
    • BULK INSERT utan CHECK_CONSTRAINTS-sats.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) med en sats för IGNORE_CONSTRAINTS.

Gör så här: Massinläsa filer i en FileTable

Du kan använda olika metoder för att massinläsa filer i en FileTable:

Ring med CHECK_CONSTRAINTS-satsen.

Inaktivera FileTable-namnområdet och anropa utan CHECK_CONSTRAINTS-satsen. Aktivera sedan filtabellens namnområde igen.

Information om hur du inaktiverar FileTable-begränsningar finns i Hantera filtabeller.

Anvisningar: Inaktivera FileTable-begränsningar för massinläsning

Om du vill massinläsa filer i en FileTable utan att behöva tillämpa systemdefinierade begränsningar kan du tillfälligt inaktivera begränsningarna. Mer information finns i Hantera filtabeller.