ALTER SCHEMA (Transact-SQL)
Überträgt ein sicherungsfähiges Element zwischen Schemas.
Syntax
ALTER SCHEMA schema_name
TRANSFER [ <entity_type> :: ] securable_name [;]
<entity_type> ::=
{
Object | Type | XML Schema Collection
}
Argumente
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.
Hinweise
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-Anweisung 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. Die 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.
Vorsicht |
---|
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). |
Berechtigungen
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.
Beispiele
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 AdventureWorks;
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 AdventureWorks;
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
Änderungsverlauf
Aktualisierter Inhalt |
---|
Die Syntax wurde korrigiert, indem der Typ und die Optionen für die XML-Schemaauflistung hinzugefügt wurden. |
Beispiel B wurde hinzugefügt. |
Siehe auch