Dela via


Arbeta med kataloger och sökvägar i FileTables

gäller för:SQL Server

Beskriver katalogstrukturen där filerna lagras i FileTables.

Anvisningar: Arbeta med kataloger och sökvägar i FileTables

Du kan använda följande tre funktioner för att arbeta med FileTable-kataloger i Transact-SQL:

Så här hämtar du det här resultatet Använd den här funktionen
Hämta UNC-sökvägen på rotnivå för en specifik FileTable eller för den aktuella databasen. FileTableRootPath (Transact-SQL)
Hämta en absolut eller relativ UNC-sökväg för en fil eller katalog i en FileTable. GetFileNamespacePath (Transact-SQL)
Hämta sökvägslokaliserarens ID-värde för den angivna filen eller katalogen i en FileTable genom att ange sökvägen. GetPathLocator (Transact-SQL)

Använda relativa sökvägar för portabel kod

Undvik att skriva kod som förlitar sig på absoluta filsökvägar för att hålla kod och program oberoende av den aktuella datorn och databasen. Hämta i stället den fullständiga sökvägen för en fil vid körning genom att använda funktionerna FileTableRootPath (Transact-SQL) och GetFileNamespacePath (Transact-SQL)) tillsammans, som du ser i följande exempel. Som standardinställning returnerar funktionen GetFileNamespacePath filens relativa sökväg under rotsökvägen för databasen.

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

Begränsningar

Hierarkinivå

Viktig

Du kan inte lagra fler än 15 nivåer av underkataloger i katalogen FileTable. När du lagrar 15 nivåer av underkataloger kan den lägsta nivån inte innehålla filer, eftersom dessa filer skulle representera ytterligare en nivå.

Längd på fullständigt sökvägsnamn

Viktig

NTFS-filsystemet stöder sökvägsnamn som är mycket längre än gränsen på 260 tecken för Windows-gränssnittet och de flesta Windows-API:er. Därför är det möjligt att skapa filer i filhierarkin för en FileTable med hjälp av Transact-SQL som du inte kan visa eller öppna med Utforskaren eller många andra Windows-program, eftersom det fullständiga sökvägsnamnet överskrider 260 tecken. Du kan dock fortsätta att komma åt dessa filer med hjälp av Transact-SQL.

Den fullständiga sökvägen till ett objekt som lagras i en FileTable

Den fullständiga sökvägen till en fil eller katalog som lagras i en FileTable börjar med följande element:

  1. En resurs som är aktiverad för "FILESTREAM"-fil-I/O-åtkomst på SQL Server-instansnivå.

  2. Den DIRECTORY_NAME som anges på databasnivå.

  3. Den FILETABLE_DIRECTORY som anges på FileTable-nivån.

Den resulterande hierarkin ser ut så här:

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

Den här kataloghierarkin utgör roten i Filtabellens filnamnområde. Under den här kataloghierarkin lagras FILESTREAM-data för FileTable som filer och som underkataloger som också kan innehålla filer och underkataloger.

Det är viktigt att komma ihåg att kataloghierarkin som skapats under FILSTREAM-resursen på instansnivå är en virtuell kataloghierarki. Den här hierarkin lagras i SQL Server-databasen och representeras inte fysiskt i NTFS-filsystemet. Alla åtgärder som har åtkomst till filer och kataloger under FILESTREAM-resursen och i de FileTables som den innehåller fångas upp och hanteras av en SQL Server-komponent som är inbäddad i filsystemet.

Semantiken för rotkatalogerna på instans-, databas- och FileTable-nivåerna

Den här kataloghierarkin observerar följande semantik:

  • FILESTREAM-resursen på instansnivå konfigureras av en administratör och lagras som en egenskap för servern. Du kan byta namn på den här resursen med hjälp av SQL Server Configuration Manager. En namnbytesåtgärd börjar inte gälla förrän servern har startats om.

  • DIRECTORY_NAME på databasnivå är null som standard när du skapar en ny databas. En administratör kan ange eller ändra det här namnet med hjälp av instruktionen ALTER DATABASE. Namnet måste vara unikt (i en skiftlägesokänslig jämförelse) inom denna instans.

  • Du anger vanligtvis FILETABLE_DIRECTORY namn som en del av CREATE TABLE-instruktionen när du skapar en FileTable. Du kan ändra det här namnet med hjälp av kommandot ALTER TABLE.

  • Du kan inte byta namn på dessa rotkataloger via fil-I/O-åtgärder.

  • Du kan inte öppna dessa rotkataloger med unika filhandtag.

Kolumnen is_directory i schemat för FileTable

I följande tabell beskrivs interaktionen mellan kolumnen is_directory och kolumnen file_stream som innehåller FILESTREAM-data i en FileTable.

Värdet för is_directory file_stream-värde Uppförande
FALSE NULL Det här är en ogiltig kombination som fångas av en systemdefinierad begränsning.
FALSE <value> Objektet representerar en fil.
TRUE NULL Objektet representerar en katalog.
TRUE <value> Det här är en ogiltig kombination som fångas av en systemdefinierad begränsning.

Använda virtuella nätverksnamn (VNN) med AlwaysOn-tillgänglighetsgrupper

När databasen som innehåller FILESTREAM- eller FileTable-data tillhör en tillgänglighetsgrupp: