Condividi tramite


Creare, modificare o eliminare una tabella FileTable

Si applica a:SQL Server

Viene descritto come creare una nuova tabella FileTable o modificarne o eliminarne una esistente.

Creare una FileTable

Una tabella FileTable è una tabella utente specializzata con uno schema predefinito e fisso. In questo schema sono archiviati dati FILESTREAM, informazioni su file e directory e attributi dei file. Per informazioni sullo schema FileTable, vedere FileTable Schema.

È possibile creare una nuova tabella FileTable tramite Transact-SQL o SQL Server Management Studio. Poiché una tabella FileTable ha uno schema fisso, non è necessario specificare un elenco di colonne. La sintassi semplice per la creazione di una tabella FileTable consente di specificare gli elementi seguenti:

  • Nome di directory. Nella gerarchia di cartelle FileTable questa directory a livello di tabella diventa il figlio della directory dei database specificata a livello di database e il padre delle directory o dei file archiviati nella tabella.

  • Nome delle regole di confronto da utilizzare per i nomi di file nella Name colonna della tabella FileTable.

  • Nomi da utilizzare per i 3 vincoli di chiave primaria e univoci creati automaticamente.

Creare una tabella FileTable con Transact-SQL

Creare una tabella FileTable chiamando l'istruzione CREATE TABLE con l'opzione AS FILETABLE . Poiché una tabella FileTable ha uno schema fisso, non è necessario specificare un elenco di colonne. È invece possibile specificare le impostazioni seguenti per la nuova tabella FileTable:

  1. FILETABLE_DIRECTORY. Specifica la directory che serve come directory radice per tutti i file e le directory archiviata in FileTable. Questo nome deve essere univoco tra tutti i nomi di directory FileTable nel database. Nel confronto dell'univocità non viene applicata la distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni delle regole di confronto correnti.

    • Questo valore ha un tipo di dati di nvarchar(255) e usa regole di confronto fisse di Latin1_General_CI_AS_KS_WS.

    • Il nome di directory specificato deve essere conforme ai requisiti del file system relativi ai nomi di directory validi.

    • Questo nome deve essere univoco tra tutti i nomi di directory FileTable nel database. Nel confronto dell'univocità non viene applicata la distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni delle regole di confronto correnti.

    • Se non si specifica un nome di directory quando si crea la tabella FileTable, il nome della tabella FileTable viene usato come nome di directory.

  2. FILETABLE_COLLATE_FILENAME. Specifica il nome delle regole di confronto da applicare alla Name colonna nella tabella FileTable.

    1. Nelle regole di confronto specificate deve essere fatta una distinzione tra maiuscole e minuscole affinché siano conformi alla semantica di denominazione file di Windows.

    2. Se non si specifica un valore per FILETABLE_COLLATE_FILENAMEo si specifica database_default, la colonna eredita le regole di confronto del database corrente. Se le regole di confronto correnti del database sono sensibili alle maiuscole, viene generato un errore e l'operazione CREATE TABLE non viene eseguita.

  3. È inoltre possibile specificare i nomi da utilizzare per i 3 vincoli di chiave primaria e univoci creati automaticamente. Se non si specificano nomi, il sistema genera nomi come descritto più avanti in questo articolo.

    • FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
    • FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
    • FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME

Esempi

Nell'esempio seguente viene creata una nuova tabella FileTable e vengono specificati i valori definiti dall'utente per FILETABLE_DIRECTORY e FILETABLE_COLLATE_FILENAME.

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

Nell'esempio seguente viene inoltre creata una nuova tabella FileTable. Poiché i valori definiti dall'utente non vengono specificati, il valore di FILETABLE_DIRECTORY diventa il nome della tabella FileTable, il valore di FILETABLE_COLLATE_FILENAME diventa database_default e la chiave primaria e i vincoli univoci ricevono nomi generati dal sistema.

CREATE TABLE DocumentStore AS FILETABLE;
GO

Creare una tabella FileTable con SQL Server Management Studio

In Esplora oggetti espandere gli oggetti inclusi nel database selezionato, fare clic con il pulsante destro del mouse sulla cartella Tabelle , quindi scegliere Nuova FileTable.

Questa opzione apre una nuova finestra di script, che contiene un modello di script Transact-SQL che è possibile personalizzare ed eseguire per creare una tabella FileTable. Per personalizzare facilmente lo script, utilizzare l'opzione Imposta valori per parametri modello dal menu Query.

Requisiti e restrizioni per la creazione di una tabella FileTable

  • Non è possibile modificare una tabella esistente per convertirla in una tabella FileTable.

  • La directory padre specificata precedentemente a livello di database deve includere un valore diverso da Null. Per informazioni su come specificare la directory a livello di database, vedere Abilitare i prerequisiti per la Tabella FileTable.

  • Poiché una tabella FileTable contiene una colonna FILESTREAM, tale tabella richiede un filegroup FILESTREAM valido. Facoltativamente, è possibile specificare un filegroup FILESTREAM valido come parte del comando per la CREATE TABLE creazione di una tabella FileTable. Se non si specifica un filegroup, la tabella FileTable usa il filegroup FILESTREAM predefinito per il database. Se il database non ha un filegroup FILESTREAM, viene generato un errore.

  • Non è possibile creare un vincolo di tabella come parte di un'istruzione CREATE TABLE...AS FILETABLE . Tuttavia, è possibile aggiungere il vincolo in un secondo momento usando un'istruzione ALTER TABLE .

  • Non è possibile creare una tabella FileTable nel tempdb database o in uno degli altri database di sistema.

  • Non è possibile creare una tabella FileTable come tabella temporanea.

Modificare una tabella FileTable

Poiché una tabella FileTable ha uno schema predefinito e fisso, non è possibile aggiungere o modificare le colonne. È invece possibile aggiungere indici, trigger, vincoli e altri elementi personalizzati a una tabella FileTable.

Per informazioni sull'uso dell'istruzione ALTER TABLE per abilitare o disabilitare lo spazio dei nomi FileTable, inclusi i vincoli definiti dal sistema, vedere Gestire tabelle FileTable.

Modificare la directory di una FileTable utilizzando Transact-SQL

Chiamare l'istruzione ALTER TABLE e specificare un nuovo valore valido per l'opzione SET per FILETABLE_DIRECTORY.

Example

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

Modificare la directory per una tabella di tipo FileTable utilizzando SQL Server Management Studio

In Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella FileTable e selezionare Proprietà per aprire la finestra di dialogo Proprietà tabella. Nella pagina FileTable immettere un nuovo valore per Nome di directory FileTable.

Requisiti e restrizioni per la modifica di una tabella FileTable

  • Non è possibile modificare il valore di FILETABLE_COLLATE_FILENAME.

  • Non è possibile modificare, eliminare o disabilitare le colonne definite dal sistema di una tabella FileTable.

  • Non è possibile aggiungere nuove colonne utente, colonne calcolate o colonne calcolate persistenti a una tabella FileTable.

Eliminare una tabella FileTable

È possibile eliminare una tabella FileTable usando la sintassi comune per l'istruzione DROP TABLE .

Quando si elimina una tabella FileTable, anche i seguenti oggetti vengono eliminati:

  • Vengono inoltre rilasciate tutte le colonne della tabella FileTable e tutti gli oggetti a essa associati, come gli indici, i vincoli e i trigger.

  • La directory FileTable e le sottodirectory in essa contenute scompaiono dalla gerarchia dei file e delle directory FILESTREAM del database.

Il DROP TABLE comando ha esito negativo se sono presenti handle di file aperti nello spazio dei nomi file della tabella FileTable. Per informazioni sulla chiusura di handle aperti, vedere Gestione di tabelle FileTable.

Quando si crea una tabella FileTable, vengono creati altri oggetti di database

Quando si crea una nuova tabella FileTable, vengono creati anche alcuni indici e vincoli definiti dal sistema. Non è possibile modificare o eliminare questi oggetti; scompaiono solo quando viene eliminata la tabella FileTable stessa. Per visualizzare l'elenco di questi oggetti, eseguire una query sulla vista del catalogo 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

Indici creati quando si crea una nuova tabella FileTable

Quando si crea una nuova tabella FileTable, vengono creati anche gli indici definiti dal sistema seguenti:

Colonne Tipo di indice Clustered
[path_locator] ASC Chiave primaria NO
[parent_path_locator] ASC, [name] ASC Unico NO
[stream_id] ASC Unico NO

Vincoli creati quando si crea una nuova tabella FileTable

Quando si crea una nuova tabella FileTable, vengono creati anche i vincoli definiti dal sistema seguenti:

Vincoli Imposizioni
Vincoli predefiniti sulle seguenti colonne:

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
I vincoli predefiniti definiti dal sistema applicano valori predefiniti per le colonne specificate.
Controlla vincoli I vincoli CHECK definiti dal sistema applicano i requisiti seguenti:

Nomi file validi.
Attributi di file validi.
L'oggetto padre deve essere una directory.
La gerarchia dello spazio dei nomi è bloccata durante la modifica dei file.

Convenzione di denominazione per i vincoli definiti dal sistema

I vincoli definiti dal sistema descritti in precedenza sono denominati nel formato <constraintType>_<tablename>[_<columnname>]_<uniquifier> in cui:

  • '<constraint_type> è CK (vincolo check), DF (vincolo predefinito), FK (chiave esterna), PK (chiave primaria) o UQ (vincolo univoco).

  • <uniquifier> è una stringa generata dal sistema per rendere univoco il nome. Questa stringa può contenere il nome della tabella FileTable e un identificatore univoco.