Freigeben über


ALTER SCHEMA (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

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

Transact-SQL-Syntaxkonventionen

Syntax

-- 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 Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric

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

Argumente

schema_name

Das Zielschema in der aktuellen Datenbank. Die sicherungsfähige Datei wird in dieses Schema verschoben. Kann nicht sein SYS oder INFORMATION_SCHEMA.

<entity_type>

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

securable_name

Der einteilige oder zweiteilige Name eines schemabezogenen sicherungsfähigen Schemas, das in das Schema verschoben werden kann.

Bemerkungen

Benutzer und Schemas vollkommen voneinander getrennt. Schemas entsprechen nicht datenbankbenutzern. Verwenden Sie Systemkatalogansichten , um unterschiede zwischen Datenbankbenutzern und Schemas zu identifizieren.

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.

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.

Alle Berechtigungen, die der sicherungsfähigen Datei zugeordnet sind, werden verworfen, wenn die sicherungsfähige Datei in das neue Schema verschoben wird. Wenn der Besitzer der sicherungsfähigen Person explizit festgelegt wurde, 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. Der principal_id neue Besitzer wird sein NULL.

Von Bedeutung

Wenn Sie ALTER SCHEMA eine gespeicherte Prozedur, Funktion, Ansicht oder Trigger in ein anderes Schema übertragen, wird der Schemaname( sofern vorhanden) des Objekts in der definition Spalte der katalogansicht sys.sql_modules oder im Ergebnis der integrierten OBJECT_DEFINITION-Funktion nicht geändert. ALTER SCHEMA Daher sollten diese Objekttypen nicht verschoben werden. Löschen Sie stattdessen das Objekt, und erstellen Sie es neu im zugehörigen neuen Schema.

Beim Verschieben eines Objekts wie z.B. einer Tabelle oder eines Synonyms werden Verweise auf das Objekt nicht automatisch aktualisiert. Sie müssen Objekte, die auf das verschobene Objekt verweisen, manuell ändern. 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. Mit sys.sql_expression_dependencies können Sie Objektabhängigkeiten auflisten, bevor Sie das Objekt verschieben.

Wenn Sie das Schema einer Tabelle mithilfe von SQL Server Management Studio ändern möchten, klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle, und wählen Sie dann " Entwurf" aus. Drücken Sie F4, um das Eigenschaftenfenster zu öffnen. Wählen Sie im Feld Schema ein neues Schema aus.

ALTER SCHEMA verwendet eine Sperre auf Schemaebene.

Vorsicht

Im Fabric SQL-Analyseendpunkt wird das Übertragen einer Tabelle zwischen Schemas über T-SQL nicht unterstützt. Dies kann sich negativ auf den Synchronisierungsvorgang zwischen OneLake und SQL-Analyseendpunkt auswirken.

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.

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.

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

Beispiele

Ein. Übertragen des Besitzes einer Tabelle

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

USE AdventureWorks2022;  
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 AdventureWorks2022;  
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 Synapse Analytics und Analytics-Plattformsystem (PDW)

C. Übertragen des Besitzes einer Tabelle

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.

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