Erstellen, Ändern und Löschen von FileTables
Gilt für: SQL Server
Beschreibt, wie eine neue FileTable erstellt bzw. eine vorhandene FileTable geändert oder gelöscht wird.
Erstellen einer FileTable
Eine FileTable ist eine spezialisierte Benutzertabelle, die ein vordefiniertes und festes Schema aufweist. Dieses Schema speichert FILESTREAM-Daten, Datei- und Verzeichnisinformationen sowie Dateiattribute. Weitere Informationen zum FileTable-Beispielschema finden Sie unter FileTable Schema.
Sie können mit Transact-SQL oder SQL Server Management Studio eine neue Dateitabelle erstellen. Da eine FileTable ein festes Schema hat, müssen Sie keine Liste von Spalten angeben. Mit der einfachen Syntax zum Erstellen einer FileTable können Sie Folgendes angeben:
Ein Verzeichnisname. In der FileTable-Ordnerhierarchie wird dieses Verzeichnis auf Tabellenebene das untergeordnete Element des Datenbankverzeichnisses, das auf Datenbankebene angegeben wurde, und das übergeordnete Element der in der Tabelle gespeicherten Dateien oder Verzeichnisse.
Den Namen der Sortierung, der in der Spalte Name der FileTable für Dateinamen verwendet werden soll.
Die Namen, die für die 3 automatisch erstellten PRIMARY KEY- und UNIQUE-Einschränkungen verwendet werden sollen.
Vorgehensweise: Erstellen einer FileTable
Erstellen einer FileTable mit Transact-SQL
Erstellen Sie eine Dateitabelle, indem Sie die Option CREATE TABLE (Transact-SQL) mit der Option AS Dateitabelle aufrufen. Da eine FileTable ein festes Schema hat, müssen Sie keine Liste von Spalten angeben. Sie können die folgenden beiden Einstellungen für die neue FileTable angeben:
FILETABLE_DIRECTORY. Gibt das Verzeichnis an, das als Stammverzeichnis für alle in der FileTable gespeicherten Dateien und Verzeichnisse verwendet wird. Dieser Name sollte für alle FileTable-Verzeichnisnamen in der Datenbank eindeutig sein. Bei Eindeutigkeitsvergleichen wird die Groß-/Kleinschreibung nicht beachtet, unabhängig von den aktuellen Sortiereinstellungen.
Dieser Wert hat weist den Datentyp nvarchar(255) auf und verwendet die feste Sortierung Latin1_General_CI_AS_KS_WS.
Der Verzeichnisname, den Sie angeben, muss den Anforderungen des Dateisystems im Hinblick auf einen gültigen Verzeichnisnamen entsprechen.
Dieser Name sollte für alle FileTable-Verzeichnisnamen in der Datenbank eindeutig sein. Bei Eindeutigkeitsvergleichen wird die Groß-/Kleinschreibung nicht beachtet, unabhängig von den aktuellen Sortiereinstellungen.
Wenn Sie beim Erstellen der FileTable keinen Verzeichnisnamen angeben, wird der Name der FileTable selbst als Verzeichnisname verwendet.
FILETABLE_COLLATE_FILENAME. Gibt den Namen der Sortierung an, die auf die Name -Spalte in der FileTable angewendet werden soll.
Zur Einhaltung der Windows-Dateinamensemantik darf bei der angegebenen Sortierung die Groß-/Kleinschreibung nicht beachtet werden.
Wenn Sie keinen Wert für FILETABLE_COLLATE_FILENAMEoder database_defaultangeben, erbt die Spalte die Sortierung der aktuellen Datenbank. Wenn bei der aktuellen Datenbanksortierung die Groß-/Kleinschreibung beachtet wird, wird ein Fehler ausgelöst, und der CREATE TABLE -Vorgang schlägt fehl.
Sie können auch die Namen angeben, die für die 3 automatisch erstellten PRIMARY KEY- und UNIQUE-Einschränkungen verwendet werden sollen. Wenn Sie keine Namen angeben, dann werden diese vom System generiert, wie weiter unten in diesem Thema beschrieben.
FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME
Beispiele
Im folgenden Beispiel wird eine neue FileTable erstellt, und für FILETABLE_DIRECTORY und FILETABLE_COLLATE_FILENAMEwerden benutzerdefinierte Werte angegeben.
CREATE TABLE DocumentStore AS FileTable
WITH (
FileTable_Directory = 'DocumentTable',
FileTable_Collate_Filename = database_default
);
GO
Im folgenden Beispiel wird zudem eine neue FileTable erstellt. Da benutzerdefinierte Werte nicht angegeben werden, wird der Wert von FILETABLE_DIRECTORY zum Namen der FileTable, der Wert von FILETABLE_COLLATE_FILENAME wird database_default, und der Primärschlüssel und eindeutige Einschränkungen empfangen vom System generierte Namen.
CREATE TABLE DocumentStore AS FileTable;
GO
Erstellen einer FileTable mithilfe von SQL Server Management Studio
Erweitern Sie im Objekt-Explorer unter der ausgewählten Datenbank die Objekte, klicken Sie dann mit der rechten Maustaste auf den Ordner Tabellen , und wählen Sie dann Neue FileTableaus.
Mit dieser Option wird ein neues Skriptfenster geöffnet, das eine Transact-SQL-Skriptvorlage enthält, die Sie zum Erstellen einer FileTable anpassen und ausführen können. Passen Sie das Skript einfach mit der Option Werte für Vorlagenparameter angeben im Menü Abfrage an.
Anforderungen und Einschränkungen beim Erstellen einer FileTable
Sie können eine vorhandene Tabelle nicht ändern, um sie in eine FileTable zu konvertieren.
Das zuvor auf der Datenbankebene angegebene übergeordnete Verzeichnis muss einen Wert ungleich NULL haben. Informationen zum Angeben des Verzeichnisses auf Datenbankebene finden Sie unter Aktivieren der erforderlichen Komponenten für FileTable.
Da eine FileTable eine FILESTREAM-Spalte enthält, erfordert eine FileTable eine gültige FILESTREAM-Dateigruppe. Zum Erstellen einer FileTable können Sie optional eine gültige FILESTREAM-Dateigruppe als Teil des CREATE TABLE -Befehls angeben. Wenn Sie keine Dateigruppe angeben, verwendet die FileTable die Standard-FILESTREAM-Dateigruppe für die Datenbank. Wenn die Datenbank keine FILESTREAM-Dateigruppe aufweist, wird ein Fehler ausgelöst.
Sie können keinen Tabellenconstraint als Teil einer CREATE TABLE...AS FILETABLE-Anweisung erstellen. Sie können die Einschränkung jedoch später mit einer ALTER TABLE -Anweisung hinzufügen.
Sie können keine FileTable in der tempdb -Datenbank oder in einer der anderen Systemdatenbanken erstellen.
Eine FileTable kann nicht als temporäre Tabelle erstellt werden.
Ändern einer FileTable
Da eine FileTable ein vordefiniertes und festes Schema aufweist, können Sie keine Spalten hinzufügen oder ändern. Sie können einer FileTable jedoch benutzerdefinierte Indizes, Trigger, Einschränkungen und andere Optionen hinzufügen.
Informationen zum Aktivieren bzw. Deaktivieren des FileTable-Namespace (einschließlich der systemdefinierten Einschränkungen) mithilfe der ALTER TABLE-Anweisung finden Sie unter Verwalten von FileTables.
Vorgehensweise: Ändern des Verzeichnisses für eine FileTable
Ändern des Verzeichnisses für eine FileTable mit Transact-SQL
Rufen Sie die ALTER TABLE-Anweisung auf, und geben Sie einen gültigen neuen Wert für die SET-Option von FILETABLE_DIRECTORY an.
Beispiel
ALTER TABLE filetable_name
SET ( FILETABLE_DIRECTORY = N'directory_name' );
GO
Ändern des Verzeichnisses für eine FileTable mit SQL Server Management Studio
Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf eine FileTable, und wählen Sie Eigenschaften aus, um das Dialogfeld Tabelleneigenschaften zu öffnen. Geben Sie auf der Seite FileTable einen neuen Wert für Name des FileTable-Verzeichnissesein.
Anforderungen und Einschränkungen beim Ändern einer FileTable
Sie können den Wert von FILETABLE_COLLATE_FILENAMEnicht ändern.
Die systemdefinierten Spalten einer FileTable können nicht geändert, gelöscht oder deaktiviert werden.
Sie können einer FileTable keine neuen Benutzerspalten, berechnete Spalten oder persistente berechnete Spalten hinzufügen.
Löschen einer FileTable
Mithilfe der normalen Syntax für die DROP TABLE (Transact-SQL)-Anweisung können Sie eine Dateitabelle löschen.
Beim Löschen einer FileTable werden auch die folgenden Objekte gelöscht:
Alle Spalten der FileTable und alle der Tabelle zugeordneten Objekte, z. B. Indizes, Einschränkungen und Trigger, werden ebenfalls gelöscht.
Das FileTable-Verzeichnis und die Unterverzeichnisse, die es enthielt, aus der FILESTREAM-Datei und der Verzeichnishierarchie der Datenbank.
Der DROP TABLE-Befehl schlägt fehl, wenn geöffnete Dateihandles im Dateinamespace der Dateitabelle vorhanden sind. Informationen zum Schließen von geöffneten Handles finden Sie unter Verwalten von FileTables.
Beim Erstellen einer FileTable werden andere Datenbankobjekte erstellt
Wenn Sie eine neue FileTable erstellen, werden auch einige systemdefinierte Indizes und Einschränkungen erstellt. Sie können diese Objekte nicht ändern oder löschen; sie verschwinden nur, wenn die FileTable selbst gelöscht wird. Um eine Liste dieser Objekte anzuzeigen, fragen Sie die Katalogsicht sys.filetable_system_defined_objects (Transact-SQL) ab.
--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
Indizes, die erstellt werden, wenn Sie eine neue FileTable erstellen
Wenn Sie eine neue FileTable erstellen, werden auch die folgenden systemdefinierten Indizes erstellt:
Spalten | Indextyp |
---|---|
[path_locator] ASC | Nicht gruppierter Primärschlüssel |
[parent_path_locator] ASC, [name] ASC |
Eindeutig und nicht gruppiert |
[stream_id] ASC | Eindeutig und nicht gruppiert |
Einschränkungen, die erstellt werden, wenn Sie eine neue FileTable erstellen
Wenn Sie eine neue FileTable erstellen, werden auch die folgenden systemdefinierten Einschränkungen erstellt:
Einschränkungen | Erzwingung |
---|---|
Standardeinschränkungen in den folgenden Spalten: 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 |
Die systemdefinierten Standardeinschränkungen erzwingen Standardwerte für die angegebenen Spalten. |
Check-Einschränkungen | Die systemdefinierten CHECK-Einschränkungen erzwingen die folgenden Anforderungen: Gültige Dateinamen Gültige Dateiattribute Übergeordnetes Objekt muss ein Verzeichnis sein. Namespacehierarchie ist während der Dateibearbeitung gesperrt. |
Benennungskonvention für die systemdefinierten Einschränkungen
Die oben beschriebenen systemdefinierten Beschränkungen werden im Format <constraintType>_<tablename>[_<columnname>]_<uniquifier> benannt, wobei:
<constraint_type> ist CK (CHECK-Einschränkung), DF (Standardeinschränkung), FK (Fremdschlüssel), PK (Primärschlüssel) oder UQ (UNIQUE-Einschränkung).
<uniquifier> ist eine vom System generierte Zeichenfolge, die den Namen eindeutig macht. Diese Zeichenfolge kann den FileTable-Namen und einen eindeutigen Bezeichner enthalten.