Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Viene descritto come creare una nuova tabella FileTable oppure modificare o eliminare una tabella FileTable esistente.
Creazione di una tabella FileTable
Una tabella FileTable è una tabella utente specializzata con uno schema predefinito e fisso. Questo schema archivia i dati FILESTREAM, le informazioni di file e directory e gli attributi di file. Per informazioni sullo schema FileTable, vedere Schema FileTable.
È possibile creare una nuova tabella FileTable usando 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:
Nome della directory. Nella gerarchia di cartelle FileTable questa directory a livello di tabella diventa l'elemento figlio della directory di database specificata a livello di database e l'elemento padre dei file o delle directory archiviate nella tabella.
Nome delle regole di confronto da utilizzare per i nomi di file nella colonna Nome della tabella FileTable.
Nomi da usare per le 3 chiavi primarie e i vincoli univoci creati automaticamente.
Procedura: Creare una tabella FileTable
Creare una tabella FileTable tramite Transact-SQL
Creare una tabella FileTable chiamando l'istruzione CREATE TABLE (Transact-SQL) con l'opzione AS FileTable . Poiché una tabella FileTable ha uno schema fisso, non è necessario specificare un elenco di colonne. È possibile specificare le impostazioni seguenti per la nuova tabella FileTable:
FILETABLE_DIRECTORY. Specifica la directory che funge da directory radice per tutti i file e le directory archiviate nella tabella FileTable. Questo nome deve essere univoco tra tutti i nomi di directory FileTable nel database. Il confronto per l'univocità non fa distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni correnti delle regole di confronto.
Questo valore ha un tipo di dati 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. Il confronto per l'univocità non fa distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni correnti delle regole di confronto.
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.
FILETABLE_COLLATE_FILENAME. Specifica il nome delle regole di confronto da applicare alla colonna Name nella tabella FileTable.
Le regole di confronto specificate devono essere senza distinzione tra maiuscole e minuscole per essere conformi alla semantica di denominazione dei file di Windows.
Se non si specifica un valore per FILETABLE_COLLATE_FILENAME o si specifica database_default, la colonna eredita le regole di confronto del database corrente. Se le regole di confronto del database corrente fa distinzione tra maiuscole e minuscole, viene generato un errore e l'operazione CREATE TABLE non riesce.
È anche possibile specificare i nomi da usare per le 3 chiavi primarie e i vincoli univoci creati automaticamente. Se non si specificano nomi, il sistema genera nomi come descritto più avanti in questo argomento.
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 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 creata anche 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 controint univoci ricevono nomi generati dal sistema.
CREATE TABLE DocumentStore AS FileTable;
GO
Creare una tabella FileTable usando SQL Server Management Studio
In Esplora oggetti espandere gli oggetti nel database selezionato, quindi fare clic con il pulsante destro del mouse sulla cartella Tabelle e quindi scegliere Nuova tabella 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. Usare l'opzione Specifica valori per i parametri modello nel menu Query per personalizzare facilmente lo script.
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 in precedenza a livello di database deve avere un valore non nullo. Per informazioni sulla specifica della directory a livello di database, vedere Abilitare i prerequisiti per la tabella FileTable.
Una tabella FileTable richiede un filegroup FILESTREAM valido, perché una tabella FileTable contiene una colonna FILESTREAM. Facoltativamente, è possibile specificare un filegroup FILESTREAM valido come parte del comando CREATE TABLE per la 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 dispone di un filegroup FILESTREAM, viene generato un errore.
Non è possibile creare un vincolo di tabella come parte di un'istruzione CREATE TABLE... Istruzione AS FILETABLE . Tuttavia, è possibile aggiungere il vincolo in un secondo momento usando un'istruzione ALTER TABLE .
Non è possibile creare una tabella FileTable nel database tempdb o in uno degli altri database di sistema.
Non è possibile creare una tabella FileTable come tabella temporanea.
Modifica di una tabella FileTable
Poiché una tabella FileTable ha uno schema predefinito e fisso, non è possibile aggiungere o modificare le relative colonne. Tuttavia, è possibile aggiungere indici, trigger, vincoli e altre opzioni personalizzate 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.
Procedura: Modificare la directory per una tabella FileTable
Modificare la directory di una FileTable usando Transact-SQL
Chiamare l'istruzione ALTER TABLE e specificare un nuovo valore valido per l'opzione FILETABLE_DIRECTORY SET.
Esempio
ALTER TABLE filetable_name
SET ( FILETABLE_DIRECTORY = N'directory_name' );
GO
Modificare la directory per un FileTable usando SQL Server Management Studio
In Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella FileTable e scegliere Proprietà per aprire la finestra di dialogo Proprietà tabella . Nella pagina FileTable immettere un nuovo valore per il nome della 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.
Eliminazione di una tabella FileTable
È possibile eliminare una tabella FileTable usando la sintassi comune per l'istruzione DROP TABLE (Transact-SQL).
Quando si rilascia una tabella FileTable, vengono eliminati anche gli oggetti seguenti:
Vengono eliminate anche tutte le colonne della tabella FileTable e tutti gli oggetti associati alla tabella, ad esempio indici, vincoli e trigger.
La directory FileTable e le sottodirectory contenute scompaiono dal file FILESTREAM e dalla gerarchia di directory del database.
Il comando DROP TABLE ha esito negativo se sono presenti handle di file aperti nello spazio dei nomi file di FileTable. Per informazioni sulla chiusura degli handle aperti, vedere Gestire 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 (Transact-SQL).
--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 |
| [path_locator] ASC | Chiave primaria, non cluster |
| [parent_path_locator] ASC [nome] ASC |
Univoco, non clusterizzato |
| [stream_id] ASC | Univoco, non clusterizzato |
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 | Impone |
|---|---|
| Vincoli predefiniti per le colonne seguenti: creation_time is_archive is_directory is_hidden is_offline is_readonly is_system is_temporary ora_ultimo_accesso last_write_time path_locator stream_id |
I vincoli predefiniti definiti dal sistema applicano i valori predefiniti per le colonne specificate. |
| Verifica dei 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 del namespace è bloccata durante la manipolazione 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> dove:
< >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.