CREATE SCHEMA (Transact-SQL)

Aktualisiert: 17. Juli 2006

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

ms189462.note(de-de,SQL.90).gifHinweis:
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.

ms189462.note(de-de,SQL.90).gifHinweis:
In SQL Server 2005 werden DENY und REVOKE 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.

ms189462.Caution(de-de,SQL.90).gifVorsicht:
Das Verhalten der Schemas in SQL Server 2005 unterscheidet sich von dem in früheren Versionen von SQL Server. Code, in dem vorausgesetzt wird, dass Schemas Datenbankbenutzern entsprechen, gibt möglicherweise nicht die richtigen Ergebnisse zurück. Alte Katalogsichten, einschließlich sysobjects, sollten nicht in einer Datenbank verwendet werden, in der jemals 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 einer Datenbank, in der jemals eine dieser Anweisungen verwendet wurde, müssen Sie die neuen Katalogsichten verwenden. In den neuen Katalogsichten wird die Trennung zwischen Prinzipalen und Schemas berücksichtigt, die in SQL Server 2005 eingeführt wird. Weitere Informationen zu Katalogsichten finden Sie unter Katalogsichten (Transact-SQL).

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.

ms189462.note(de-de,SQL.90).gifHinweis:
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 AdventureWorks;
CREATE SCHEMA Sprockets AUTHORIZATION Annik
    CREATE TABLE NineProngs (source int, cost int, partnumber int)
    GRANT SELECT TO Mandar
    DENY SELECT TO Prasanna;
GO 

Siehe auch

Verweis

ALTER SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
GRANT (Transact-SQL)
DENY (Transact-SQL)
REVOKE (Transact-SQL)
CREATE VIEW (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.schemas (Transact-SQL)

Andere Ressourcen

Trennung von Benutzer und Schema

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

17. Juli 2006

Geänderter Inhalt:
  • Die Syntax wurde korrigiert.