ALTER SCHEMA (Transact-SQL)ALTER SCHEMA (Transact-SQL)

Dieses Thema gilt für: JaSQL Server (ab 2008)JaAzure SQL-DatenbankJaAzure SQL Data Warehouse Ja Parallel Datawarehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Überträgt ein sicherungsfähiges Element zwischen Schemas.Transfers a securable between schemas.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database  

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

<entity_type> ::=  
    {  
    Object | Type | XML Schema Collection  
    }  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

ALTER SCHEMA schema_name   
   TRANSFER [ OBJECT :: ] securable_name   
[;]  

ArgumenteArguments

schema_nameschema_name
Der Name eines Schemas in der aktuellen Datenbank, in das das sicherungsfähige Element verschoben wird.Is the name of a schema in the current database, into which the securable will be moved. Kann weder SYS noch INFORMATION_SCHEMA sein.Cannot be SYS or INFORMATION_SCHEMA.

<entity_type><entity_type>
Die Klasse der Entität, für die der Besitzer geändert wird.Is the class of the entity for which the owner is being changed. Object ist der Standardwert.Object is the default.

securable_namesecurable_name
Bezeichnet den ein- oder zweiteiligen Namen eines sicherungsfähigen schemabezogenen Elements, das in das Schema verschoben werden soll.Is the one-part or two-part name of a schema-scoped securable to be moved into the schema.

RemarksRemarks

Benutzer und Schemas vollkommen voneinander getrennt.Users and schemas are completely separate.

ALTER SCHEMA kann nur zum Verschieben von sicherungsfähigen Elementen zwischen Schemas in derselben Datenbank verwendet werden.ALTER SCHEMA can only be used to move securables between schemas in the same database. 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.To change or drop a securable within a schema, use the ALTER or DROP statement specific to that securable.

Wenn ein einteiliger Name für securable_name verwendet wird, werden die derzeit gültigen Regeln zur Namensauflösung zum Auffinden des sicherungsfähigen Elements angewendet.If a one-part name is used for securable_name, the name-resolution rules currently in effect will be used to locate the securable.

Alle dem sicherungsfähigen Element zugeordneten Berechtigungen werden gelöscht, wenn das sicherungsfähige Element in das neue Schema verschoben wird.All permissions associated with the securable will be dropped when the securable is moved to the new schema. Wurde der Besitzer des sicherungsfähigen Elements explizit festgelegt, bleibt der Besitzer unverändert.If the owner of the securable has been explicitly set, the owner will remain unchanged. 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.If the owner of the securable has been set to SCHEMA OWNER, the owner will remain SCHEMA OWNER; however, after the move SCHEMA OWNER will resolve to the owner of the new schema. principal_id des neuen Besitzers ist NULL.The principal_id of the new owner will be NULL.

Durch das Verschieben einer gespeicherten Prozedur, Funktion, Sicht oder eines Triggers wird der möglicherweise vorhandene Schemaname des entsprechenden Objekts nicht geändert. Dies gilt sowohl für eine Bezeichnung in der definition-Spalte der sys.sql_modules-Katalogsicht als auch für eine Bezeichnung, die über die integrierte Funktion OBJECT_DEFINITION abgerufen wird.Moving a stored procedure, function, view, or trigger will not change the schema name, if present, of the corresponding object either in the definition column of the sys.sql_modules catalog view or obtained using the OBJECT_DEFINITION built-in function. Daher ist es empfehlenswert, ALTER SCHEMA nicht zum Verschieben dieser Objekttypen zu verwenden.Therefore, we recommend that ALTER SCHEMA not be used to move these object types. Löschen Sie stattdessen das Objekt, und erstellen Sie es neu im zugehörigen neuen Schema.Instead, drop and re-create the object in its new schema.

Beim Verschieben eines Objekts wie z.B. einer Tabelle oder eines Synonyms werden Verweise auf das Objekt nicht automatisch aktualisiert.Moving an object such as a table or synonym will not automatically update references to that object. Sie müssen Objekte, die auf das verschobene Objekt verweisen, manuell ändern.You must modify any objects that reference the transferred object manually. Wenn Sie z.B. eine Tabelle verschieben und in einem Trigger auf diese Tabelle verwiesen wird, müssen Sie den Trigger ändern, damit für ihn der Schemaname verwendet wird.For example, if you move a table and that table is referenced in a trigger, you must modify the trigger to reflect the new schema name. Mit sys.sql_expression_dependencies können Sie Objektabhängigkeiten auflisten, bevor Sie das Objekt verschieben.Use sys.sql_expression_dependencies to list dependencies on the object before moving it.

Wenn Sie das Schema einer Tabelle mit SQL Server Management StudioSQL Server Management Studio ändern möchten, können Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle und anschließend auf Entwurf klicken.To change the schema of a table by using SQL Server Management StudioSQL Server Management Studio, in Object Explorer, right-click on the table and then click Design. Drücken Sie F4, um das Eigenschaftenfenster zu öffnen.Press F4 to open the Properties window. Wählen Sie im Feld Schema ein neues Schema aus.In the Schema box, select a new schema.

Achtung

Ab SQL Server 2005 hat sich das Verhalten der Schemas geändert.Beginning with SQL Server 2005, the behavior of schemas changed. Daher gibt Code, der voraussetzt, dass Schemas mit Datenbankbenutzern identisch sind, nunmehr keine richtigen Ergebnisse mehr zurück.As a result, code that assumes that schemas are equivalent to database users may no longer return correct results. 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.Old catalog views, including sysobjects, should not be used in a database in which any of the following DDL statements have ever been used: 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 derlei Datenbanken müssen Sie stattdessen die neuen Katalogansichten verwenden.In such databases you must instead use the new catalog views. In den neuen Katalogsichten wird die Trennung zwischen Prinzipalen und Schemas berücksichtigt, die in SQL Server 2005 eingeführt wurde.The new catalog views take into account the separation of principals and schemas that was introduced in SQL Server 2005. Weitere Informationen zu Katalogansichten finden Sie unter Catalog Views (Transact-SQL) (Katalogansichten (Transact-SQL)).For more information about catalog views, see Catalog Views (Transact-SQL).

BerechtigungenPermissions

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.To transfer a securable from another schema, the current user must have CONTROL permission on the securable (not schema) and ALTER permission on the target schema.

Wenn das sicherungsfähige Element über eine EXECUTE AS OWNER-Spezifikation verfügt und der Benutzer als SCHEMA OWNER festgelegt ist, benötigt der Benutzer auch die IMPERSONATE-Berechtigung für den Besitzer des Zielschemas.If the securable has an EXECUTE AS OWNER specification on it and the owner is set to SCHEMA OWNER, the user must also have IMPERSONATE permission on the owner of the target schema.

Alle dem sicherungsfähigen Element, das übertragen wird, zugeordneten Berechtigungen werden gelöscht, wenn es verschoben wird.All permissions associated with the securable that is being transferred are dropped when it is moved.

BeispieleExamples

A.A. Übertragen des Besitzes einer TabelleTransferring ownership of a table

Im folgenden Beispiel wird das HumanResources-Schema durch Übertragen der Address-Tabelle aus dem Person-Schema in das Schema geändert.The following example modifies the schema HumanResources by transferring the table Address from schema Person into the schema.

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

B.B. Übertragen des Besitzes eines TypsTransferring ownership of a type

Im folgenden Beispiel wird ein Typ im Production-Schema erstellt und dann an das Person-Schema übertragen.The following example creates a type in the Production schema, and then transfers the type to the Person schema.

USE AdventureWorks2012;  
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  

Beispiele: Azure SQL Data WarehouseAzure SQL Data Warehouse und Parallel Data WarehouseParallel Data Warehouse.Examples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

C.C. Übertragen des Besitzes einer TabelleTransferring ownership of a table

Im folgenden Beispiel werden eine Region-Tabelle im dbo-Schema und ein Sales-Schema erstellt. Anschließend wird die Region-Tabelle aus dem dbo-Schema in das Sales-Schema verschoben.The following example creates a table Region in the dbo schema, creates a Sales schema, and then moves the Region table from the dbo schema to the Sales schema.

CREATE TABLE dbo.Region   
    (Region_id int NOT NULL,  
    Region_Name char(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

CREATE SCHEMA Sales;  
GO  

ALTER SCHEMA Sales TRANSFER OBJECT::dbo.Region;  
GO  

Weitere Informationen finden Sie unterSee Also

CREATE SCHEMA (Transact-SQL) CREATE SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL) DROP SCHEMA (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)