CREATE SCHEMA (Transact-SQL)

Erstellt ein Schema in der aktuellen Datenbank. Mit der CREATE SCHEMA-Transaktion können auch Tabellen und Sichten innerhalb des neuen Schemas erstellt und GRANT-, DENY- oder REVOKE-Berechtigungen für diese Objekte festgelegt werden.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]

<schema_name_clause> ::=
    {
    schema_name
    | AUTHORIZATION owner_name
    | schema_name AUTHORIZATION owner_name
    }

<schema_element> ::= 
    { 
        table_definition | view_definition | grant_statement | 
        revoke_statement | deny_statement 
    }

Argumente

  • schema_name
    Der Name, mit dem das Schema innerhalb der Datenbank identifiziert wird.

  • AUTHORIZATION owner_name
    Gibt den Namen des Prinzipals auf Datenbankebene an, der der Besitzer des Schemas ist. Dieser Prinzipal kann andere Schemas besitzen und verwendet das aktuelle Schema möglicherweise nicht als Standardschema.

  • table_definition
    Gibt eine CREATE TABLE-Anweisung an, die eine Tabelle in dem Schema erstellt. Der Prinzipal, der diese Anweisung ausführt, benötigt die CREATE TABLE-Berechtigung für die aktuelle Datenbank.

  • view_definition
    Gibt eine CREATE VIEW-Anweisung an, die eine Sicht in dem Schema erstellt. Der Prinzipal, der diese Anweisung ausführt, benötigt die CREATE VIEW-Berechtigung für die aktuelle Datenbank.

  • grant_statement
    Gibt eine GRANT-Anweisung an, die Berechtigungen für jedes sicherungsfähige Element außer dem neuen Schema erteilt.

  • revoke_statement
    Gibt eine REVOKE-Anweisung an, die Berechtigungen für jedes sicherungsfähige Element außer dem neuen Schema aufhebt.

  • deny_statement
    Gibt eine DENY-Anweisung an, die Berechtigungen für jedes sicherungsfähige Element außer dem neuen Schema verweigert.

Hinweise

HinweisHinweis

Anweisungen, die CREATE SCHEMA AUTHORIZATION enthalten, aber keinen Namen angeben, sind nur aus Gründen der Abwärtskompatibilität zulässig.

Mit CREATE SCHEMA können ein Schema und die darin enthaltenen Tabellen und Sichten sowie die Berechtigungen GRANT, REVOKE oder DENY für jedes sicherungsfähige Element in einer einzelnen Anweisung erstellt werden. Diese Anweisung muss als separater Batch ausgeführt werden. Mit der CREATE SCHEMA-Anweisung erstellte Objekte werden innerhalb des zu erstellenden Schemas erstellt.

CREATE SCHEMA-Transaktionen sind atomar. Wenn während der Ausführung einer CREATE SCHEMA-Anweisung ein Fehler auftritt, werden keine der angegebenen sicherungsfähigen Elemente erstellt, und es werden keine Berechtigungen erteilt.

Die von CREATE SCHEMA zu erstellenden sicherungsfähigen Elemente können in einer beliebigen Reihenfolge aufgelistet werden, außer bei Sichten, die auf andere Sichten verweisen. In diesem Fall muss die Sicht, auf die verwiesen wird, vor der verweisenden Sicht erstellt werden.

Deshalb kann eine GRANT-Anweisung eine Berechtigung für ein Objekt erteilen, bevor das Objekt selbst erstellt wird. Ebenso kann eine CREATE VIEW-Anweisung vor den entsprechenden CREATE TABLE-Anweisungen auftreten, die die Tabellen erstellen, auf die die Sicht verweist. CREATE TABLE-Anweisungen können darüber hinaus Fremdschlüssel für Tabellen deklarieren, die später in der CREATE SCHEMA-Anweisung definiert werden.

HinweisHinweis

DENY und REVOKE werden in CREATE SCHEMA-Anweisungen unterstützt. DENY- und REVOKE-Klauseln werden in der Reihenfolge ausgeführt, in der sie in der CREATE SCHEMA-Anweisung angezeigt werden.

Der Prinzipal, der CREATE SCHEMA ausführt, kann einen anderen Datenbankprinzipal als Besitzer des erstellten Schemas angeben. Dies erfordert zusätzliche Berechtigungen, die im Abschnitt "Berechtigungen" weiter unten in diesem Thema beschrieben werden.

Das neue Schema ist im Besitz einer der folgenden Prinzipale auf Datenbankebene: Datenbankbenutzer, Datenbankrolle oder Anwendungsrolle. Objekte, die innerhalb eines Schemas erstellt werden, gehören dem Besitzer des Schemas und haben für principal_id in sys.objects einen NULL-Wert. Der Besitz von Objekten, die Schemas als Bereich aufweisen, kann an jeden Prinzipal auf Datenbankebene übertragen werden, aber der Schemabesitzer behält immer die CONTROL-Berechtigung für Objekte innerhalb des Schemas.

VorsichtshinweisVorsicht

Mit SQL Server 2005 wurde das Verhalten von Schemas geändert. Deshalb werden von Code, der voraussetzt, dass Schemas und Datenbankbenutzer äquivalent sind, möglicherweise keine richtigen Ergebnisse mehr zurückgegeben. Alte Katalogsichten, einschließlich sysobjects, sollten nicht in einer Datenbank verwendet werden, in der bereits eine der folgenden DDL-Anweisungen verwendet wurde: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. In solchen Datenbanken müssen Sie stattdessen neue Katalogsichten verwenden. In den neuen Katalogsichten wird die Trennung zwischen Prinzipalen und Schemas berücksichtigt, die in SQL Server 2005 eingeführt wurde. Weitere Informationen zu Katalogsichten finden Sie unter Katalogsichten (Transact-SQL).

Wenn Sie beim Erstellen eines Datenbankobjekts einen gültigen Domänenprinzipal als Objektbesitzer (Benutzer oder Gruppe) angeben, wird der Domänenprinzipal der Datenbank als Schema hinzugefügt. Das neue Schema befindet sich im Besitz des Domänenprinzipals.

Hinweis zur Abwärtskompatibilität

CREATE SCHEMA-Anweisungen, die keinen Schemanamen angeben, werden derzeit aus Gründen der Abwärtskompatibilität unterstützt. Solche Anweisungen erstellen kein Schema in der Datenbank, sondern Tabellen und Sichten, und sie erteilen Berechtigungen. Prinzipale benötigen die CREATE SCHEMA-Berechtigung nicht zum Ausführen dieser älteren Version von CREATE SCHEMA, weil kein Schema erstellt wird. Diese Funktionalität wird in zukünftigen Versionen von SQL Server nicht mehr bereitgestellt.

Berechtigungen

Erfordert die CREATE SCHEMA-Berechtigung für die Datenbank.

Zum Erstellen eines in der CREATE SCHEMA-Anweisung angegebenen Objekts muss der Benutzer über die entsprechende CREATE-Berechtigung verfügen.

Um einen anderen Benutzer als den Besitzer des zu erstellenden Schemas anzugeben, benötigt der Aufrufer die IMPERSONATE-Berechtigung für diesen Benutzer. Wenn eine Datenbankrolle als Besitzer angegeben wird, muss der Aufrufer entweder über eine Mitgliedschaft in der Rolle oder die ALTER-Berechtigung für die Rolle verfügen.

HinweisHinweis

Für die Abwärtskompatibilitätssyntax werden keine Berechtigungen für CREATE SCHEMA überprüft, weil kein Schema erstellt wird.

Beispiele

Das folgende Beispiel erstellt das Sprockets-Schema, das im Besitz von Annik ist und die NineProngs-Tabelle enthält. Die Anweisung erteilt die SELECT-Berechtigung für Mandar und verweigert die SELECT-Berechtigung für Prasanna. Beachten Sie, dass Sprockets und NineProngs in einer einzigen Anweisung erstellt werden.

USE AdventureWorks2008R2;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
    CREATE TABLE NineProngs (source int, cost int, partnumber int)
    GRANT SELECT ON SCHEMA::Sprockets TO Mandar
    DENY SELECT ON SCHEMA::Sprockets TO Prasanna;
GO