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
,xcopy
ofrobocopy
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:
Maak een nieuwe FileTable om de bestanden op te slaan. In dit voorbeeld wordt de tabelnaam
dbo.PhotoTable
gebruikt, maar wordt de code niet weergegeven om de tabel te maken.Gebruik xcopy- of een vergelijkbaar hulpprogramma om de
.jpg
-bestanden, met hun mapstructuur, te kopiëren naar de hoofdmap van de FileTable.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
metCHECK_CONSTRAINTS
clausule. -
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
zonderIGNORE_CONSTRAINTS
clausule.
-
bcp met
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
zonderCHECK_CONSTRAINTS
clausule. -
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
metIGNORE_CONSTRAINTS
clausule.
-
bcp zonder
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.