Delen via


Bestanden laden in FileTables

van toepassing op:SQL Server-

Hierin wordt beschreven hoe u bestanden laadt of migreert naar FileTables.

Bestanden laden of migreren naar een FileTable

De methode die u kiest voor het laden of migreren van bestanden naar een FileTable, is afhankelijk van de locatie waar de bestanden momenteel zijn opgeslagen.

Huidige locatie van bestanden Opties voor migratie
Bestanden worden momenteel opgeslagen in het bestandssysteem.

SQL Server heeft geen kennis van de bestanden.
Omdat een FileTable wordt weergegeven als een map in het Windows-bestandssysteem, kunt u eenvoudig bestanden in een nieuwe FileTable laden met behulp van een van de beschikbare methoden voor het verplaatsen of kopiëren van bestanden. Deze methoden omvatten Windows Verkenner, opdrachtregelopties, zoals xcopy en robocopy, en aangepaste scripts of toepassingen.

U kunt een bestaande map niet converteren naar een FileTable.
Bestanden worden momenteel opgeslagen in het bestandssysteem.

SQL Server bevat een tabel met metagegevens met aanwijzers naar de bestanden.
De eerste stap is het verplaatsen of kopiëren van de bestanden met behulp van een van de bovenstaande methoden.

De tweede stap is het bijwerken van de bestaande tabel met metagegevens om te verwijzen naar de nieuwe locatie van de bestanden.

Zie Voorbeeld: Bestanden van het bestandssysteem migreren naar een FileTable- in dit artikel voor meer informatie.

Hoe te: Bestanden laden in een FileTable

U kunt de volgende methoden gebruiken om bestanden in een FileTable te laden:

  • Sleep bestanden uit de bronmappen naar de nieuwe map FileTable in Windows Verkenner.

  • Gebruik opdrachtregelopties zoals move, copy, xcopyof robocopy vanaf de opdrachtprompt of in een batchbestand of script.

  • Schrijf een aangepaste toepassing om de bestanden te verplaatsen of te kopiëren in C# of Visual Basic .NET. Methoden aanroepen vanuit de System.IO naamruimte.

Voorbeeld: Bestanden van het bestandssysteem migreren naar een FileTable

In dit scenario worden uw bestanden opgeslagen in het bestandssysteem en hebt u een tabel met metagegevens in SQL Server met aanwijzers naar de bestanden. U wilt de bestanden verplaatsen naar een FileTable en vervolgens het oorspronkelijke UNC-pad voor elk bestand in de metagegevens vervangen door het UNC-pad van FileTable. De functie GetPathLocator helpt u dit doel te bereiken.

In dit voorbeeld wordt ervan uitgegaan dat er een bestaande databasetabel is, PhotoMetadata, die gegevens over foto's bevat. Deze tabel bevat een kolom UNCPath van het type varchar(512) dat het werkelijke UNC-pad naar een .jpg bestand bevat.

Als u de afbeeldingsbestanden van het bestandssysteem wilt migreren naar een FileTable, moet u het volgende doen:

  1. Maak een nieuwe FileTable om de bestanden op te slaan. In dit voorbeeld wordt de tabelnaam dbo.PhotoTablegebruikt, maar wordt de code niet weergegeven om de tabel te maken.

  2. Gebruik xcopy- of een vergelijkbaar hulpprogramma om de .jpg-bestanden, met hun mapstructuur, te kopiëren naar de hoofdmap van de FileTable.

  3. Los de metagegevens in de PhotoMetadata tabel op met behulp van code die vergelijkbaar is met het volgende voorbeeld:

--  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);

Bestanden bulksgewijs laden in een FileTable

Een FileTable gedraagt zich als een normale tabel voor bulkbewerkingen. Een FileTable heeft door het systeem gedefinieerde beperkingen die ervoor zorgen dat de integriteit van de bestands- en mapnaamruimte behouden blijft. Deze beperkingen moeten worden gecontroleerd op de gegevens die bulksgewijs in de FileTable zijn geladen. Omdat sommige bewerkingen voor bulksgewijs invoegen toestaan dat tabelbeperkingen worden genegeerd, worden de volgende vereisten afgedwongen.

  • Bewerkingen voor het laden van bulk die beperkingen afdwingen, kunnen worden uitgevoerd op een FileTable zoals voor elke andere tabel. Deze categorie bevat de volgende bewerkingen:

    • bcp met CHECK_CONSTRAINTS clausule.
    • BULK INSERT met CHECK_CONSTRAINTS clausule.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) zonder IGNORE_CONSTRAINTS clausule.
  • Bewerkingen voor bulk laden die geen beperkingen afdwingen, mislukken tenzij de door het FileTable-systeem gedefinieerde beperkingen zijn uitgeschakeld. Deze categorie bevat de volgende bewerkingen:

    • bcp zonder CHECK_CONSTRAINTS clausule.
    • BULK INSERT zonder CHECK_CONSTRAINTS clausule.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) met IGNORE_CONSTRAINTS clausule.

Procedure: Bestanden bulksgewijs laden in een FileTable

U kunt verschillende methoden gebruiken om bestanden bulksgewijs te laden in een FileTable:

Roep de CHECK_CONSTRAINTS-clausule aan.

Schakel de FileTable-naamruimte uit en roep deze aan zonder de CHECK_CONSTRAINTS component. Schakel vervolgens de FileTable-naamruimte opnieuw in.

Zie FileTable-beheren voor meer informatie over het uitschakelen van bestandstabelbeperkingen.

Procedure: FileTable-beperkingen uitschakelen voor bulksgewijs laden

Als u bestanden bulksgewijs wilt laden in een FileTable zonder de overhead van het afdwingen van de door het systeem gedefinieerde beperkingen, kunt u de beperkingen tijdelijk uitschakelen. Zie FileTables beherenvoor meer informatie.