Dela via


Skapa, ändra eller släppa en FileTable

Gäller för:SQL Server

Beskriver hur du skapar en ny FileTable eller ändrar eller släpper en befintlig Filtabell.

Skapa en Filtabell

En FileTable är en specialiserad användartabell som har ett fördefinierat och fast schema. Det här schemat lagrar FILESTREAM-data, fil- och kataloginformation och filattribut. Information om FileTable-schemat finns i Arkivtabellschema.

Du kan skapa en ny FileTable med hjälp av Transact-SQL eller SQL Server Management Studio. Eftersom en FileTable har ett fast schema behöver du inte ange en lista med kolumner. Med den enkla syntaxen för att skapa en FileTable kan du ange:

  • Ett katalognamn. I FileTables mapphierarki blir denna katalog på tabellnivå en underkatalog till databaskatalogen som anges på databasnivå och överordnad till de filer eller kataloger som lagras i tabellen.

  • Namnet på sorteringen som ska användas för filnamn i Name kolumnen i FileTable.

  • De namn som ska användas för de 3 primära nycklarna och unika begränsningar som skapas automatiskt.

Skapa en FileTable med Transact-SQL

Skapa en FileTable genom att anropa CREATE TABLE-instruktionen med alternativet AS FILETABLE . Eftersom en FileTable har ett fast schema behöver du inte ange en lista med kolumner. Du kan ange följande inställningar för den nya FileTable:

  1. FILETABLE_DIRECTORY. Anger den katalog som fungerar som rotkatalog för alla filer och kataloger som lagras i FileTable. Det här namnet bör vara unikt bland alla Filtabellkatalognamn i databasen. Jämförelse för unikhet är skiftlägesokänsligt, oavsett aktuella sorteringsinställningar.

    • Det här värdet har en datatyp av nvarchar(255) och använder en fast sortering av Latin1_General_CI_AS_KS_WS.

    • Det katalognamn som du anger måste uppfylla kraven i filsystemet för ett giltigt katalognamn.

    • Det här namnet bör vara unikt bland alla Filtabellkatalognamn i databasen. Jämförelse för unikhet är skiftlägesokänsligt, oavsett aktuella sorteringsinställningar.

    • Om du inte anger något katalognamn när du skapar FileTable används namnet på själva Filtabellen som katalognamn.

  2. FILETABLE_COLLATE_FILENAME. Anger namnet på sorteringen som ska tillämpas på Name kolumnen i FileTable.

    1. Den angivna sorteringen måste vara skiftlägesokänslig för att följa Windows-filnamngivningssemantik.

    2. Om du inte anger något värde för FILETABLE_COLLATE_FILENAME, eller om du anger database_default, ärver kolumnen sortering av den aktuella databasen. Om den aktuella databassorteringen är skiftlägeskänslig utlöses ett fel och åtgärden CREATE TABLE misslyckas.

  3. Du kan också ange de namn som ska användas för den 3 primära nyckeln och unika begränsningar som skapas automatiskt. Om du inte anger namn genererar systemet namn enligt beskrivningen senare i den här artikeln.

    • FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
    • FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
    • FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME

Examples

I följande exempel skapas en ny FileTable och specificeras användardefinierade värden för både FILETABLE_DIRECTORY och FILETABLE_COLLATE_FILENAME.

CREATE TABLE DocumentStore AS FILETABLE
WITH (
    FILETABLE_DIRECTORY = 'DocumentTable',
    FILETABLE_COLLATE_FILENAME = database_default
);
GO

I följande exempel skapas också en ny FileTable. Eftersom användardefinierade värden inte har angetts blir värdet FILETABLE_DIRECTORY namnet på FileTable, värdet FILETABLE_COLLATE_FILENAME blir database_default, och den primära nyckeln och den unika begränsningen får systemgenererade namn.

CREATE TABLE DocumentStore AS FILETABLE;
GO

Skapa en FileTable med SQL Server Management Studio

I Object Explorer expanderar du objekten under den valda databasen, högerklickar sedan på mappen Tabeller och väljer sedan Ny filtabell.

Det här alternativet öppnar ett nytt skriptfönster som innehåller en Transact-SQL skriptmall som du kan anpassa och köra för att skapa en FileTable. Använd alternativet Ange värden för mallparametrarpå frågemenyn för att enkelt anpassa skriptet.

Krav och begränsningar för att skapa en FileTable

  • Du kan inte ändra en befintlig tabell för att konvertera den till en FileTable.

  • Den överordnade katalogen som tidigare angetts på databasnivå måste ha ett värde som inte är null. Information om hur du anger katalogen på databasnivå finns i Aktivera förutsättningarna för FileTable.

  • En FileTable kräver en giltig FILESTREAM-filgrupp eftersom en FileTable innehåller en FILESTREAM-kolumn. Du kan också ange en giltig FILESTREAM-filgrupp som en del av CREATE TABLE kommandot för att skapa en FileTable. Om du inte anger en filgrupp använder FileTable standardfilgruppen FILESTREAM för databasen. Om databasen inte har någon FILESTREAM-filgrupp utlöses ett fel.

  • Du kan inte skapa en tabellbegränsning som en del av en CREATE TABLE... -AS FILETABLE instruktion. Du kan dock lägga till villkoret senare med hjälp av en ALTER TABLE -instruktion.

  • Du kan inte skapa en FileTable i tempdb databasen eller i någon av de andra systemdatabaserna.

  • Du kan inte skapa en FileTable som en tillfällig tabell.

Ändra en Filtabell

Eftersom en FileTable har ett fördefinierat och fast schema kan du inte lägga till eller ändra dess kolumner. Du kan dock lägga till anpassade index, utlösare, begränsningar och andra alternativ i en FileTable.

Information om hur du använder -instruktionen ALTER TABLE för att aktivera eller inaktivera FileTable-namnområdet, inklusive de systemdefinierade begränsningarna, finns i Hantera filtabeller.

Ändra katalogen för en FileTable med hjälp av Transact-SQL

Anropa instruktionen ALTER TABLE och ange ett giltigt nytt värde för SET alternativ för FILETABLE_DIRECTORY.

Example

ALTER TABLE filetable_name SET (FILETABLE_DIRECTORY = N'directory_name');
GO

Ändra katalogen för en FileTable med hjälp av SQL Server Management Studio

I Object Explorer högerklickar du på FileTable och väljer Egenskaper för att öppna dialogrutan Tabellegenskaper . På sidan FileTable anger du ett nytt värde för Filtabellkatalognamn.

Krav och begränsningar för att ändra en FileTable

  • Du kan inte ändra värdet för FILETABLE_COLLATE_FILENAME.

  • Du kan inte ändra, släppa eller inaktivera systemdefinierade kolumner i en FileTable.

  • Du kan inte lägga till nya användarkolumner, beräknade kolumner eller beständiga beräknade kolumner i en FileTable.

Ta bort en FileTable

Du kan släppa en FileTable med hjälp av den vanliga syntaxen för DROP TABLE-instruktionen .

När du släpper en FileTable tas även följande objekt bort:

  • Alla kolumner i FileTable och alla objekt som är associerade med tabellen, till exempel index, begränsningar och utlösare, tas också bort.

  • Katalogen FileTable och de underkataloger som den innehöll försvinner från filestream-filen och kataloghierarkin i databasen.

Kommandot DROP TABLE misslyckas om det finns öppna filreferenser i Filtabellens filnamnområde. För information om hur man stänger öppna handtag, se Hantera filtabeller.

Andra databasobjekt skapas när du skapar en Filtabell

När du skapar en ny FileTable skapas även vissa systemdefinierade index och begränsningar. Du kan inte ändra eller släppa dessa objekt. de försvinner bara när själva FileTable tas bort. Om du vill se listan över dessa objekt frågar du katalogvyn sys.filetable_system_defined_objects.

--View all objects for all filetables, unsorted
SELECT *
FROM sys.filetable_system_defined_objects;
GO

--View sorted list with friendly names
SELECT OBJECT_NAME(parent_object_id) AS 'FileTable',
       OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';
GO

Index som skapas när du skapar en ny Filtabell

När du skapar en ny FileTable skapas även följande systemdefinierade index:

Columns Indextyp Clustered
[path_locator] ASC Primär nyckel Nej
[parent_path_locator] ASC, [name] ASC Unique Nej
[stream_id] ASC Unique Nej

Begränsningar som skapas när du skapar en ny FileTable

När du skapar en ny FileTable skapas även följande systemdefinierade begränsningar:

Constraints Framtvingar
Standardbegränsningar för följande kolumner:

creation_time
is_archive
is_directory
is_hidden
is_offline
is_readonly
is_system
is_temporary
last_access_time
last_write_time
path_locator
stream_id
De systemdefinierade standardbegränsningarna tillämpar standardvärden för de angivna kolumnerna.
Kontrollera begränsningar De systemdefinierade kontrollbegränsningarna tillämpar följande krav:

Giltiga filnamn.
Giltiga filattribut.
Det överordnade objektet måste vara en katalog.
Namnrymdshierarkin är låst under filhantering.

Namngivningskonvention för systemdefinierade begränsningar

De systemdefinierade begränsningar som beskrevs tidigare namnges i formatet <constraintType>_<tablename>[_<columnname>]_<uniquifier> där:

  • <constraint_type> är CK (kontrollbegränsning), DF (standardbegränsning), FK (främmande nyckel), PK (primärnyckel) eller UQ (unik nyckel).

  • <uniquifier> är en systemgenererad sträng som gör namnet unikt. Den här strängen kan innehålla FileTable-namnet och en unik identifierare.