Načtení souborů do FileTables
platí pro:SQL Server
Popisuje, jak načíst nebo migrovat soubory do FileTables.
Načtení nebo migrace souborů do FileTable
Metoda, kterou zvolíte pro načtení nebo migraci souborů do FileTable, závisí na tom, kde jsou soubory aktuálně uloženy.
Aktuální umístění souborů | Možnosti migrace |
---|---|
Soubory jsou aktuálně uloženy v systému souborů. SQL Server nemá žádné znalosti o souborech. |
Vzhledem k tomu, že FileTable se v systému souborů Windows zobrazuje jako složka, můžete snadno načíst soubory do nové FileTable pomocí některé z dostupných metod pro přesouvání nebo kopírování souborů. Mezi tyto metody patří Průzkumník Windows, možnosti příkazového řádku, včetně xcopy a robocopya vlastních skriptů nebo aplikací. Existující složku nelze převést na FileTable. |
Soubory jsou aktuálně uloženy v systému souborů. SQL Server obsahuje tabulku metadat, která obsahuje ukazatele na soubory. |
Prvním krokem je přesunutí nebo zkopírování souborů pomocí některé z výše uvedených metod. Druhým krokem je aktualizace existující tabulky metadat tak, aby odkazovat na nové umístění souborů. Další informace naleznete v části tohoto článku s názvem Příklad: Migrace souborů ze souborového systému do FileTable. |
Postupy: Načtení souborů do tabulky FileTable
K načtení souborů do Tabulky FileTable můžete použít následující metody:
Přetáhněte soubory ze zdrojových složek do nové složky FileTable v Průzkumníku Windows.
Použijte možnosti příkazového řádku, jako jsou
move
,copy
,xcopy
neborobocopy
z příkazového řádku nebo v dávkovém souboru nebo skriptu.Napište vlastní aplikaci pro přesunutí nebo zkopírování souborů v jazyce C# nebo Visual Basic .NET. Volání metod z oboru názvů
System.IO
Příklad: Migrace souborů ze systému souborů do FileTable
V tomto scénáři jsou vaše soubory uloženy v systému souborů a máte tabulku metadat v SQL Serveru, která obsahuje ukazatele na soubory. Chcete přesunout soubory do FileTable a potom nahradit původní cestu UNC pro každý soubor v metadatech cestou UNC FileTable. Funkce GetPathLocator vám pomůže dosáhnout tohoto cíle.
V tomto příkladu předpokládejme, že existuje existující tabulka databáze, PhotoMetadata
, která obsahuje data o fotografiích. Tato tabulka obsahuje sloupec UNCPath
typu varchar(512), který obsahuje skutečnou cestu UNC k souboru .jpg
.
Pokud chcete migrovat soubory obrázků ze systému souborů do FileTable, musíte udělat následující věci:
Vytvořte novou tabulku FileTable pro uložení souborů. Tento příklad používá název tabulky
dbo.PhotoTable
, ale nezobrazuje kód pro vytvoření tabulky.Pomocí xcopy nebo podobného nástroje zkopírujte soubory
.jpg
s jejich adresářovou strukturou do kořenového adresáře FileTable.Opravte metadata v tabulce
PhotoMetadata
pomocí kódu podobného následujícímu příkladu:
-- 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);
Hromadné načtení souborů do FileTable
FileTable se chová jako normální tabulka pro hromadné operace. FileTable má systémově definovaná omezení, která zajišťují zachování integrity oboru názvů souborů a adresářů. Tato omezení musí být ověřena u hromadně načtených dat do FileTable. Vzhledem k tomu, že některé operace hromadného vložení umožňují ignorovat omezení tabulek, jsou vynuceny následující požadavky.
Operace hromadného načítání, které vynucují omezení, se dají spouštět v tabulce FileTable jako u jakékoli jiné tabulky. Tato kategorie zahrnuje následující operace:
-
bcp s klauzulí
CHECK_CONSTRAINTS
. -
BULK INSERT
s klauzulíCHECK_CONSTRAINTS
. -
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
bez klauzulyIGNORE_CONSTRAINTS
.
-
bcp s klauzulí
Operace hromadného načítání, které nevynucují omezení, selžou, pokud nejsou zakázaná systémová omezení definovaná systémem FileTable. Tato kategorie zahrnuje následující operace:
-
bcp bez klauzule
CHECK_CONSTRAINTS
. -
BULK INSERT
bez klauzuleCHECK_CONSTRAINTS
. -
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
s doložkouIGNORE_CONSTRAINTS
.
-
bcp bez klauzule
Postupy: Hromadné načtení souborů do tabulky FileTable
Soubory můžete hromadně načíst do Tabulky FileTable pomocí různých metod:
Volání pomocí klauzule CHECK_CONSTRAINTS
Zakažte jmenný prostor FileTable a proveďte volání bez klauzule CHECK_CONSTRAINTS
. Potom znovu povolte obor názvů FileTable.
Informace o zakázání omezení FileTable naleznete v tématu Správa tabulek souborů.
Jak na to: Zakázání omezení FileTable pro hromadné nahrávání
Pokud chcete hromadně načíst soubory do FileTable bez režie vynucení systémově definovaných omezení, můžete tato omezení dočasně zakázat. Další informace najdete v tématu Správa tabulek souborů.