Partager via


MODIFIER SCHEMA (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison d’analytique SQL dans Microsoft FabricEntrepôt dans Microsoft FabricBase de données SQL dans Microsoft Fabric

Transfère un élément sécurisable d'un schéma à un autre.

Conventions de la syntaxe Transact-SQL

Syntaxe

-- 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   
[;]  

Les arguments

schema_name

Schéma cible dans la base de données active. L’élément sécurisable est déplacé dans ce schéma. Impossible d’être SYS ou INFORMATION_SCHEMA.

<entity_type>

Classe de l’entité pour laquelle le propriétaire est modifié. Object est la valeur par défaut.

securable_name

Nom d’une partie ou de deux parties d’un élément sécurisable à portée de schéma à déplacer dans le schéma.

Notes

Les utilisateurs et les schémas sont complètement distincts. Les schémas ne sont pas équivalents aux utilisateurs de base de données. Utilisez les vues de catalogue système pour identifier les différences entre les utilisateurs de base de données et les schémas.

L'instruction ALTER SCHEMA ne peut être utilisée que pour transférer des éléments sécurisables entre des schémas de la même base de données. Pour modifier ou supprimer un élément sécurisable au sein du même schéma, utilisez l'instruction ALTER ou DROP propre à cet élément sécurisable.

Si un nom en une seule partie est utilisé pour securable_name, les règles de résolution de noms en vigueur s’appliquent pour identifier l’emplacement de l’élément sécurisable.

Toutes les autorisations associées à l’élément sécurisable sont supprimées lorsque l’élément sécurisable est déplacé vers le nouveau schéma. Si le propriétaire de l’élément sécurisable a été défini explicitement, le propriétaire reste inchangé. Si la valeur SCHEMA OWNER a été attribuée au propriétaire de l'élément sécurisable, celui-ci reste SCHEMA OWNER ; une fois le transfert effectué, la valeur de SCHEMA OWNER est le propriétaire du nouveau schéma. Le principal_id nouveau propriétaire sera NULL.

Important

Si vous utilisez ALTER SCHEMA pour transférer une procédure stockée, une fonction, une vue ou un déclencheur vers un autre schéma, il ne modifie pas le nom du schéma, le cas échéant, de l’objet dans la definition colonne de l’affichage catalogue sys.sql_modules , ou dans le résultat de la fonction intégrée OBJECT_DEFINITION . Par conséquent, ALTER SCHEMA ne doit pas être utilisé pour déplacer ces types d’objets. À la place, supprimez puis recréez l’objet dans son nouveau schéma.

Le fait de déplacer un objet tel qu’une table ou un synonyme ne met pas automatiquement à jour les références à cet objet. Vous devez modifier manuellement tout objet qui référence l’objet transféré. Par exemple, si vous déplacez une table et que cette table est référencée dans un déclencheur, vous devez modifier le déclencheur pour refléter le nom du nouveau schéma. Utilisez sys.sql_expression_dependencies pour répertorier les dépendances de l’objet avant de le déplacer.

Pour modifier le schéma d’une table à l’aide de SQL Server Management Studio, dans l’Explorateur d’objets, cliquez avec le bouton droit sur la table, puis sélectionnez Création. Appuyez sur F4 pour ouvrir la fenêtre Propriétés. Dans la zone Schéma, sélectionnez un nouveau schéma.

ALTER SCHEMA utilise un verrou de niveau de schéma.

Avertissement

Dans le point de terminaison d’analytique Sql Fabric, le transfert d’une table entre des schémas via T-SQL n’est pas pris en charge. Elle peut avoir un impact négatif sur l’opération de synchronisation entre OneLake et le point de terminaison d’analytique SQL.

Autorisations

Pour transférer un élément sécurisable provenant d'un autre schéma, l'utilisateur actuel doit bénéficier de l'autorisation CONTROL sur l'élément sécurisable (et non sur le schéma) et de l'autorisation ALTER sur le schéma cible.

Si l’élément sécurisable est soumis à une spécification EXECUTE AS OWNER et que le propriétaire est défini sur SCHEMA OWNER, l’utilisateur doit également bénéficier de l’autorisation IMPERSONATE sur le propriétaire du schéma cible.

Toutes les autorisations associées à l'élément sécurisable soumis à un transfert sont supprimées lors du déplacement de cet élément.

Exemples

R. Transfert de la propriété d'une table

L’exemple suivant modifie le schéma HumanResources en transférant la table Address du schéma Person vers le schéma HumanResources.

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

B. Transférer la propriété d’un type

L'exemple suivant crée un type dans le schéma Production, puis transfère le type vers le schéma Person.

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  

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

Chapitre C. Transfert de la propriété d'une table

L’exemple suivant crée une table Region dans le schéma dbo, crée un schéma Sales, puis déplace la table Region du schéma dbo vers le schéma Sales.

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