CREATE SCHEMA (Transact-SQL)

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

Crée un schéma dans la base de données active. La transaction CREATE SCHEMA peut également créer des tables et des vues dans le nouveau schéma et définir des autorisations GRANT, DENY ou REVOKE sur ces objets.

Conventions de la syntaxe Transact-SQL

Syntaxe

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]  
  
<schema_name_clause> ::=  
    {  
    schema_name  
    | AUTHORIZATION owner_name  
    | schema_name AUTHORIZATION owner_name  
    }  
  
<schema_element> ::=   
    {   
        table_definition | view_definition | grant_statement |   
        revoke_statement | deny_statement   
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

Arguments

schema_name
Nom qui identifie le schéma dans cette base de données.

AUTHORIZATION owner_name
Spécifie le nom du principal au niveau base de données qui est propriétaire du schéma. Ce principal peut posséder d'autres schémas et peut ne pas utiliser le schéma actif comme schéma par défaut.

table_definition
Spécifie une instruction CREATE TABLE qui crée une table dans le schéma. Le principal qui exécute cette instruction doit avoir l'autorisation CREATE TABLE sur la base de données active.

view_definition
Spécifie une instruction CREATE VIEW qui crée une vue dans le schéma. Le principal qui exécute cette instruction doit avoir l'autorisation CREATE VIEW sur la base de données active.

grant_statement
Spécifie une instruction GRANT qui accorde des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.

revoke_statement
Spécifie une instruction REVOKE qui révoque des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.

deny_statement
Spécifie une instruction DENY qui refuse des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.

Notes

Notes

Les instructions qui contiennent CREATE SCHEMA AUTHORIZATION sans spécifier un nom sont acceptées uniquement pour des raisons de compatibilité descendante. L'instruction ne génère pas d'erreur, mais un schéma n'est pas créé.

CREATE SCHEMA peut créer un schéma, les tables et les vues qu'il contient, et accorder (GRANT), révoquer (REVOKE) ou refuser (DENY) des autorisations sur tout élément sécurisable dans une instruction. Cette instruction doit être exécutée en tant que lot séparé. Les objets créés par l'instruction CREATE SCHEMA sont créés à l'intérieur du schéma en cours de création.

Les transactions CREATE SCHEMA sont atomiques. Si une erreur se produit pendant l'exécution d'une instruction CREATE SCHEMA, aucun des éléments sécurisables spécifiés n'est créé et aucune autorisation n'est accordée.

Il est possible de répertorier les éléments sécurisables à créer par l'instruction CREATE SCHEMA dans n'importe quel ordre, excepté pour les vues qui référencent d'autres vues. Dans ce cas, la vue référencée doit être créée avant la vue qui la référence.

Par conséquent, une instruction GRANT peut accorder une autorisation sur un objet avant la création de cet objet, ou une instruction CREATE VIEW peut apparaître avant les instructions CREATE TABLE qui créent les tables référencées par la vue. De même, les instructions CREATE TABLE peuvent déclarer des clés étrangères sur des tables qui sont définies ultérieurement dans l'instruction CREATE SCHEMA.

Notes

DENY et REVOKE sont pris en charge dans des instructions CREATE SCHEMA. Les clauses DENY et REVOKE sont exécutées dans leur ordre d'apparition dans l'instruction CREATE SCHEMA.

Le principal qui exécute CREATE SCHEMA peut désigner un autre principal de base de données en tant que propriétaire du schéma créé. Pour cela, il est nécessaire de disposer d'autorisations supplémentaires, comme l'explique la section « Autorisations » plus loin dans cette rubrique.

Le nouveau schéma appartient à l'un des principaux de base de données suivants : utilisateur de base de données, rôle de base de données ou rôle d'application. Les objets créés dans un schéma appartiennent au propriétaire du schéma. La valeur principal_id de ces objets est NULL dans sys.objects. Il est possible de transférer la propriété des objets contenus dans le schéma à n'importe quel principal de base de données, mais le propriétaire du schéma conserve toujours l'autorisation CONTROL sur les objets dans le schéma.

Attention

Avec l'arrivée de SQL Server 2005, le comportement des schémas a changé. Ainsi, le code qui suppose que les schémas sont équivalents aux utilisateurs de base de données peut ne plus renvoyer des résultats corrects. Vous ne devez pas recourir aux anciens affichages catalogue, notamment sysobjects, dans une base de données où une des instructions DDL suivantes a été utilisée : 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. Dans ces bases de données, vous devez utiliser les nouveaux affichages catalogue. Les nouveaux affichages catalogue tiennent compte de la séparation des principaux et des schémas introduite dans SQL Server 2005 Pour plus d'informations sur les affichages catalogue, consultez Affichages catalogue (Transact-SQL).

Création implicite d’utilisateur et de schéma

Remarque

L’ID Microsoft Entra était précédemment appelé Azure Active Directory (Azure AD).

Dans certains cas, un utilisateur peut utiliser une base de données sans posséder de compte d'utilisateur de base de données (principal de base de données dans la base de données). Cela peut se produire dans les situations suivantes :

  • Une connexion a des privilèges CONTROL SERVER.

  • Un utilisateur de Windows ne possède pas de compte d'utilisateur de base de données individuel (principal de base de données dans la base de données), mais il accède à une base de données en tant que membre d'un groupe Windows possédant un compte d'utilisateur de base de données (principal de base de données pour le groupe Windows).

  • Un utilisateur Microsoft Entra n’a pas de compte d’utilisateur de base de données individuel (principal de base de données dans la base de données), mais accède à une base de données en tant que membre d’un groupe Microsoft Entra qui a un compte d’utilisateur de base de données (principal de base de données pour le groupe Microsoft Entra).

Lorsqu'un utilisateur sans compte d'utilisateur de base de données crée un objet sans spécifier de schéma existant, un principal de base de données et un schéma par défaut sont créés automatiquement dans la base de données pour cet utilisateur. Le principal de base de données et le schéma créés portent le nom utilisé par l’utilisateur lors de la connexion à SQL Server (le nom de connexion d’authentification SQL Server ou le nom d’utilisateur Windows).

Ce comportement est nécessaire pour permettre aux utilisateurs basés sur des groupes Windows de créer et de posséder des objets. Il peut cependant entraîner la création involontaire de schémas et d'utilisateurs. Pour éviter la création implicite d'utilisateurs et de schémas, dans la mesure du possible vous devez créer de manière explicite des principaux de base de données et assigner un schéma par défaut. Vous pouvez également déclarer de manière explicite un schéma existant lors de la création d'objets dans une base de données, à l'aide de noms d'objets en deux ou trois parties.

Remarque

La création implicite d’un utilisateur Microsoft Entra n’est pas possible sur SQL Database. Étant donné que la création d’un utilisateur Microsoft Entra à partir d’un fournisseur externe doit case activée l’état de l’utilisateur dans Microsoft Entra ID, la création de l’utilisateur échoue avec l’erreur 2760 : le nom de schéma spécifié «< user_name@domain> » n’existe pas ou vous n’êtes pas autorisé à l’utiliser. Ensuite, l’erreur 2759 : CREATE SCHEMA a échoué en raison d’erreurs précédentes. Les tentatives de création ou de modification de schémas entraînent l’erreur 15151 : Impossible de trouver l’utilisateur « », car il n’existe pas ou vous n’avez pas d’autorisation., suivi de l’erreur 2759. Pour contourner ces erreurs, créez l’utilisateur Microsoft Entra à partir d’un fournisseur externe ou modifiez le groupe Microsoft Entra pour affecter un schéma par défaut. Réexécutez ensuite l’instruction qui crée l’objet.

Dans le point de terminaison d’analytique SQL et l’entrepôt dans Microsoft Fabric, les noms de schémas ne peuvent pas contenir / ou \ se terminer par un ..

Note relative à la suppression de fonctionnalités

Les instructions CREATE SCHEMA qui ne spécifient pas de nom de schéma continuent à être prises en charge pour des raisons de compatibilité descendante. De telles instructions ne créent pas réellement un schéma dans la base de données, mais créent plutôt des tables et des vues, et accordent des autorisations. Les principaux n'ont pas besoin de l'autorisation CREATE SCHEMA pour exécuter cette version antérieure de CREATE SCHEMA, car aucun schéma n'est créé. Cette fonctionnalité sera retirée dans une version future de SQL Server.

Autorisations

Nécessite l'autorisation CREATE SCHEMA sur la base de données.

Pour créer un objet spécifié dans l'instruction CREATE SCHEMA, l'utilisateur doit disposer de l'autorisation CREATE correspondante.

Pour spécifier un autre utilisateur comme propriétaire du schéma à créer, l'appelant doit avoir l'autorisation IMPERSONATE sur cet utilisateur. Si un rôle de base de données est spécifié en tant que propriétaire, l'appelant doit disposer de l'un des éléments suivants : appartenance au rôle ou autorisation ALTER pour le rôle.

Notes

Pour la compatibilité descendante de la syntaxe, aucune vérification n'est effectuée sur l'autorisation CREATE SCHEMA car aucun schéma n'est créé.

Exemples

R. Création d’un schéma et octroi d’autorisations

L'exemple suivant crée le schéma Sprockets détenu par Annik qui contient la table NineProngs. L'instruction accorde SELECT à Mandar et refuse SELECT à Prasanna. Remarquez que Sprockets et NineProngs sont créés dans une même instruction.

USE AdventureWorks2022;  
GO  
CREATE SCHEMA Sprockets AUTHORIZATION Annik  
    CREATE TABLE NineProngs (source int, cost int, partnumber int)  
    GRANT SELECT ON SCHEMA::Sprockets TO Mandar  
    DENY SELECT ON SCHEMA::Sprockets TO Prasanna;  
GO   

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

B. Création d’un schéma et d’une table dans le schéma

L’exemple suivant crée un schéma Sales, puis une table Sales.Region dans ce schéma.

CREATE SCHEMA Sales;  
GO
  
CREATE TABLE Sales.Region   
(Region_id INT NOT NULL,  
Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

C. Définition du propriétaire d’un schéma

L’exemple suivant crée un schéma Production appartenant à Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Voir aussi

ALTER SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
GRANT (Transact-SQL)
DENY (Transact-SQL)
REVOKE (Transact-SQL)
CREATE VIEW (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.schemas (Transact-SQL)
Créer un schéma de base de données