ALTER SCHEMA (Transact-SQL)

Überträgt ein sicherungsfähiges Element zwischen Schemas.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen


ALTER SCHEMA schema_name 
   TRANSFER [ <entity_type> :: ] securable_name [;]

<entity_type> ::=
    {
        Object | Type | XML Schema Collection
    }

schema_name

Der Name eines Schemas in der aktuellen Datenbank, in das das sicherungsfähige Element verschoben wird. Kann weder SYS noch INFORMATION_SCHEMA sein.

<entity_type>

Die Klasse der Entität, für die der Besitzer geändert wird. Object ist der Standardwert.

securable_name

Bezeichnet den ein- oder zweiteiligen Namen eines sicherungsfähigen Elements mit Schemabereich, das in das Schema verschoben werden soll.

Benutzer und Schemas vollkommen voneinander getrennt. Weitere Informationen finden Sie unter Trennung von Benutzer und Schema.

ALTER SCHEMA kann nur zum Verschieben von sicherungsfähigen Elementen zwischen Schemas in derselben Datenbank verwendet werden. Zum Ändern oder Löschen eines sicherungsfähigen Elements in einem Schema verwenden Sie die für das sicherungsfähige Element spezifische ALTER- oder DROP-Anweisung.

Wird ein einteiliger Name für securable_name verwendet, werden die derzeit gültigen Regeln der Namensauflösung zum Auffinden des sicherungsfähigen Elements angewendet.

Alle dem sicherungsfähigen Element zugeordneten Berechtigungen werden gelöscht, wenn das sicherungsfähige Element in das neue Schema verschoben wird. Wurde der Besitzer des sicherungsfähigen Elements explizit festgelegt, bleibt der Besitzer unverändert. Wenn der Besitzer des sicherungsfähigen Elements auf SCHEMA OWNER festgelegt wurde, bleibt diese Einstellung zunächst erhalten. Nach dem Verschieben wird SCHEMA OWNER jedoch zum Besitzer des neuen Schemas aufgelöst. principal_id des neuen Besitzers ist NULL.

Um das Schema einer Tabelle oder Sicht mithilfe von SQL Server Management Studio zu ändern, klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle bzw. Sicht, und klicken Sie dann auf Entwurf. Drücken Sie F4, um das Eigenschaftenfenster anzuzeigen. Wählen Sie im Feld Schema ein neues Schema aus.

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).

Für die Übertragung eines sicherungsfähigen Elements aus einem anderen Schema benötigt der aktuelle Benutzer die CONTROL-Berechtigung für das sicherungsfähige Element (nicht das Schema) sowie die ALTER-Berechtigung für das Zielschema.

Verfügt das sicherungsfähige Element über eine EXECUTE AS OWNER-Spezifikation und der Benutzer ist als SCHEMA OWNER festgelegt, benötigt der Benutzer auch die IMPERSONATION-Berechtigung für den Besitzer des Zielschemas.

Alle dem sicherungsfähigen Element, das übertragen wird, zugeordneten Berechtigungen werden gelöscht, wenn es verschoben wird.

A. Übertragen des Besitzes einer Tabelle

Im folgenden Beispiel wird das HumanResources-Schema durch Übertragen der Address-Tabelle aus dem Person-Schema in das Schema geändert.

USE AdventureWorks2008R2;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

B. Übertragen des Besitzes eines Typs

Im folgenden Beispiel wird ein Typ im Production-Schema erstellt und dann an das Person-Schema übertragen.

USE AdventureWorks2008R2;
GO

CREATE TYPE Production.TestType FROM [varchar](10) NOT NULL ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

Community-Beiträge

HINZUFÜGEN
Anzeigen: