Delen via


Werken met mappen en paden in FileTables

van toepassing op:SQL Server-

Beschrijft de mapstructuur waarin de bestanden worden opgeslagen in FileTables.

Handleiding: Werken met mappen en paden in FileTables

U kunt de volgende drie functies gebruiken om te werken met FileTable-mappen in Transact-SQL:

Om dit resultaat te bereiken Deze functie gebruiken
Verkrijg het UNC-pad op rootniveau voor een specifieke FileTable of voor de huidige database. FileTableRootPath (Transact-SQL)
Haal een absoluut of relatief UNC-pad op voor een bestand of map in een FileTable. GetFileNamespacePath (Transact-SQL)
Haal de ID-waarde van de padlocator op voor het opgegeven bestand of de opgegeven map in een FileTable, door het pad op te geven. GetPathLocator (Transact-SQL)

Relatieve paden gebruiken voor draagbare code

Als u code en toepassingen onafhankelijk van de huidige computer en database wilt houden, vermijdt u het schrijven van code die afhankelijk is van absolute bestandspaden. Haal in plaats daarvan het complete pad van een bestand tijdens uitvoering op met behulp van de functies FileTableRootPath (Transact-SQL) en GetFileNamespacePath (Transact-SQL)) zoals te zien is in het volgende voorbeeld. De functie GetFileNamespacePath retourneert standaard het relatieve pad van het bestand onder het hoofdpad voor de database.

USE database_name;

DECLARE @root NVARCHAR(100);
DECLARE @fullpath NVARCHAR(1000);

SELECT @root = FileTableRootPath();

SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';

PRINT @fullpath;
GO

Beperkingen

Nestniveau

Belangrijk

U kunt niet meer dan 15 niveaus van submappen opslaan in de map FileTable. Wanneer u 15 niveaus met submappen opslaat, kan het laagste niveau geen bestanden bevatten, omdat deze bestanden een extra niveau vertegenwoordigen.

Lengte van volledige padnaam

Belangrijk

Het NTFS-bestandssysteem ondersteunt padnamen die veel langer zijn dan de limiet van 260 tekens van de Windows-shell en de meeste Windows-API's. Daarom is het mogelijk om bestanden te maken in de bestandshiërarchie van een FileTable met behulp van Transact-SQL die u niet kunt weergeven of openen met Windows Verkenner of vele andere Windows-toepassingen, omdat de volledige padnaam langer is dan 260 tekens. U kunt deze bestanden echter blijven openen met behulp van Transact-SQL.

Het volledige pad naar een item dat is opgeslagen in een FileTable

Het volledige pad naar een bestand of map die in een FileTable is opgeslagen, begint met de volgende elementen:

  1. De share die is ingeschakeld voor I/O-toegang van FILESTREAM-bestanden op het niveau van het SQL Server-exemplaar.

  2. De DIRECTORY_NAME is opgegeven op databaseniveau.

  3. De FILETABLE_DIRECTORY opgegeven op FileTable-niveau.

De resulterende hiërarchie ziet er als volgt uit:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Deze maphiërarchie vormt de basis van de bestandsnaamruimte van de FileTable. Onder deze maphiërarchie worden de FILESTREAM-gegevens voor de FileTable opgeslagen als bestanden en als submappen die ook bestanden en submappen kunnen bevatten.

Het is belangrijk om te bedenken dat de directoryhiërarchie, die onder de FILESTREAM-share op het niveau van het exemplaar is aangemaakt, een virtuele directoryhiërarchie is. Deze hiërarchie wordt opgeslagen in de SQL Server-database en wordt niet fysiek weergegeven in het NTFS-bestandssysteem. Alle bewerkingen die toegang hebben tot bestanden en mappen onder de FILESTREAM-share en in de FileTables die deze bevat, worden onderschept en verwerkt door een SQL Server-onderdeel dat is ingesloten in het bestandssysteem.

De semantiek van de hoofdmappen op het niveau van het exemplaar, de database en de FileTable

In deze adreslijsthiërarchie ziet u de volgende semantiek:

  • De FILESTREAM-share op exemplaarniveau wordt geconfigureerd door een beheerder en opgeslagen als eigenschap van de server. U kunt de naam van deze share wijzigen met behulp van SQL Server Configuration Manager. Een hernoemingsbewerking wordt pas van kracht nadat de server opnieuw is opgestart.

  • De DIRECTORY_NAME op databaseniveau is standaard null wanneer u een nieuwe database maakt. Een beheerder kan deze naam instellen of wijzigen met behulp van de instructie ALTER DATABASE. De naam moet uniek zijn (in een niet-hoofdlettergevoelige vergelijking) in deze context.

  • Doorgaans geeft u de FILETABLE_DIRECTORY naam op als onderdeel van de instructie CREATE TABLE wanneer u een FileTable maakt. U kunt deze naam wijzigen met behulp van de opdracht ALTER TABLE.

  • U kunt de naam van deze hoofdmappen niet wijzigen via I/O-bewerkingen voor bestanden.

  • U kunt deze rootmappen niet openen met exclusieve bestandshandvatten.

De kolom is_directory in het FileTable-schema

De volgende tabel beschrijft de interactie tussen de is_directory kolom en de file_stream kolom die de FILESTREAM-gegevens in een FileTable bevat.

is_directory waarde waarde van de bestandsstroom Gedrag
FALSE NULL Dit is een ongeldige combinatie die wordt gedetecteerd door een door het systeem gedefinieerde beperking.
FALSE <value> Het item vertegenwoordigt een bestand.
TRUE NULL Het item vertegenwoordigt een map.
TRUE <value> Dit is een ongeldige combinatie die wordt gedetecteerd door een door het systeem gedefinieerde beperking.

Virtuele Netwerk Namen (VNN's) gebruiken met Always On-beschikbaarheidsgroepen

Wanneer de database die FILESTREAM- of FileTable-gegevens bevat, deel uitmaakt van een beschikbaarheidsgroep: