CREATE SCHEMA (Transact-SQL)CREATE SCHEMA (Transact-SQL)

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Crée un schéma dans la base de données active.Creates a schema in the current database. 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.The CREATE SCHEMA transaction can also create tables and views within the new schema, and set GRANT, DENY, or REVOKE permissions on those objects.

Icône du lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

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

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentsArguments

schema_nameschema_name
Nom qui identifie le schéma dans cette base de données.Is the name by which the schema is identified within the database.

AUTHORIZATION owner_nameAUTHORIZATION owner_name
Spécifie le nom du principal au niveau base de données qui est propriétaire du schéma.Specifies the name of the database-level principal that will own the schema. Ce principal peut posséder d'autres schémas et peut ne pas utiliser le schéma actif comme schéma par défaut.This principal may own other schemas, and may not use the current schema as its default schema.

table_definitiontable_definition
Spécifie une instruction CREATE TABLE qui crée une table dans le schéma.Specifies a CREATE TABLE statement that creates a table within the schema. Le principal qui exécute cette instruction doit avoir l'autorisation CREATE TABLE sur la base de données active.The principal executing this statement must have CREATE TABLE permission on the current database.

view_definitionview_definition
Spécifie une instruction CREATE VIEW qui crée une vue dans le schéma.Specifies a CREATE VIEW statement that creates a view within the schema. Le principal qui exécute cette instruction doit avoir l'autorisation CREATE VIEW sur la base de données active.The principal executing this statement must have CREATE VIEW permission on the current database.

grant_statementgrant_statement
Spécifie une instruction GRANT qui accorde des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.Specifies a GRANT statement that grants permissions on any securable except the new schema.

revoke_statementrevoke_statement
Spécifie une instruction REVOKE qui révoque des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.Specifies a REVOKE statement that revokes permissions on any securable except the new schema.

deny_statementdeny_statement
Spécifie une instruction DENY qui refuse des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.Specifies a DENY statement that denies permissions on any securable except the new schema.

NotesRemarks

Notes

Les instructions qui contiennent CREATE SCHEMA AUTHORIZATION sans spécifier un nom sont acceptées uniquement pour des raisons de compatibilité descendante.Statements that contain CREATE SCHEMA AUTHORIZATION but do not specify a name, are permitted for backward compatibility only. L'instruction ne génère pas d'erreur, mais un schéma n'est pas créé.The statement does not cause an error, but does not create a schema.

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.CREATE SCHEMA can create a schema, the tables and views it contains, and GRANT, REVOKE, or DENY permissions on any securable in a single statement. Cette instruction doit être exécutée en tant que lot séparé.This statement must be executed as a separate batch. Les objets créés par l'instruction CREATE SCHEMA sont créés à l'intérieur du schéma en cours de création.Objects created by the CREATE SCHEMA statement are created inside the schema that is being created.

Les transactions CREATE SCHEMA sont atomiques.CREATE SCHEMA transactions are atomic. 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.If any error occurs during the execution of a CREATE SCHEMA statement, none of the specified securables are created and no permissions are granted.

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.Securables to be created by CREATE SCHEMA can be listed in any order, except for views that reference other views. Dans ce cas, la vue référencée doit être créée avant la vue qui la référence.In that case, the referenced view must be created before the view that references it.

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.Therefore, a GRANT statement can grant permission on an object before the object itself is created, or a CREATE VIEW statement can appear before the CREATE TABLE statements that create the tables referenced by the view. 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.Also, CREATE TABLE statements can declare foreign keys to tables that are defined later in the CREATE SCHEMA statement.

Notes

DENY et REVOKE sont pris en charge dans des instructions CREATE SCHEMA.DENY and REVOKE are supported inside CREATE SCHEMA statements. Les clauses DENY et REVOKE sont exécutées dans leur ordre d'apparition dans l'instruction CREATE SCHEMA.DENY and REVOKE clauses will be executed in the order in which they appear in the CREATE SCHEMA statement.

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éé.The principal that executes CREATE SCHEMA can specify another database principal as the owner of the schema being created. Pour cela, il est nécessaire de disposer d'autorisations supplémentaires, comme l'explique la section « Autorisations » plus loin dans cette rubrique.This requires additional permissions, as described in the "Permissions" section later in this topic.

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.The new schema is owned by one of the following database-level principals: database user, database role, or application role. 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.Objects created within a schema are owned by the owner of the schema, and have a NULL principal_id in 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.Ownership of schema-contained objects can be transferred to any database-level principal, but the schema owner always retains CONTROL permission on objects within the schema.

Attention

Avec l'arrivée de SQL Server 2005, le comportement des schémas a changé.Beginning with SQL Server 2005, the behavior of schemas changed. 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.As a result, code that assumes that schemas are equivalent to database users may no longer return correct results. 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.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. Dans ces bases de données, vous devez utiliser les nouveaux affichages catalogue.In such databases you must instead use the new catalog views. Les nouveaux affichages catalogue tiennent compte de la séparation des principaux et des schémas introduite dans SQL Server 2005The new catalog views take into account the separation of principals and schemas that was introduced in SQL Server 2005. Pour plus d’informations sur les affichages catalogue, consultez Affichages catalogue (Transact-SQL).For more information about catalog views, see Catalog Views (Transact-SQL).

Création implicite d’utilisateur et de schémaImplicit Schema and User Creation

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).In some cases a user can use a database without having a database user account (a database principal in the database). Cela peut se produire dans les situations suivantes :This can happen in the following situations:

  • Une connexion a des privilèges CONTROL SERVER.A login has CONTROL SERVER privileges.

  • 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).A Windows user does not have an individual database user account (a database principal in the database), but accesses a database as a member of a Windows group which has a database user account (a database principal for the Windows group).

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.When a user without a database user account creates an object without specifying an existing schema, a database principal and default schema will be automatically created in the database for that user. Le schéma et le principal de base de données créés auront le même nom que celui utilisé par l'utilisateur lors de la connexion à SQL ServerSQL Server (le nom de connexion d'authentification SQL ServerSQL Server ou le nom d'utilisateur Windows).The created database principal and schema will have the same name as the name that user used when connecting to SQL ServerSQL Server (the SQL ServerSQL Server authentication login name or the Windows user name).

Ce comportement est nécessaire pour permettre aux utilisateurs basés sur des groupes Windows de créer et de posséder des objets.This behavior is necessary to allow users that are based on Windows groups to create and own objects. Il peut cependant entraîner la création involontaire de schémas et d'utilisateurs.However it can result in the unintentional creation of schemas and users. 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.To avoid implicitly creating users and schemas, whenever possible explicitly create database principals and assign a default schema. 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.Or explicitly state an existing schema when creating objects in a database, using two or three-part object names.

Notes

La création implicite d’un utilisateur Azure Active Directory n’est pas possible sur SQL DatabaseSQL Database.The implicit creation of an Azure Active Directory user is not possible on SQL DatabaseSQL Database. Étant donné que la création d’un utilisateur Azure AD à partir du fournisseur externe doit vérifier l’état des utilisateurs dans l’annuaire AAD, 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.Since creating an Azure AD user from external provider must check the users status in the AAD, creating the user will fail with error 2760: The specified schema name "<user_name@domain>" either does not exist or you do not have permission to use it. Puis avec l’erreur 2759 : Échec de CREATE SCHEMA en raison d’erreurs antérieures.And then error 2759: CREATE SCHEMA failed due to previous errors. Pour contourner ces erreurs, créez d’abord l’utilisateur Azure AD à partir du fournisseur externe, puis réexécutez l’instruction de création de l’objet.To work around these errors, create the Azure AD user from external provider first and then rerun the statement creating the object.

Note relative à la suppression de fonctionnalitésDeprecation Notice

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.CREATE SCHEMA statements that do not specify a schema name are currently supported for backward compatibility. 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.Such statements do not actually create a schema inside the database, but they do create tables and views, and grant permissions. 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éé.Principals do not need CREATE SCHEMA permission to execute this earlier form of CREATE SCHEMA, because no schema is being created. Cette fonctionnalité sera retirée dans une version future de SQL ServerSQL Server.This functionality will be removed from a future release of SQL ServerSQL Server.

AutorisationsPermissions

Nécessite l'autorisation CREATE SCHEMA sur la base de données.Requires CREATE SCHEMA permission on the database.

Pour créer un objet spécifié dans l'instruction CREATE SCHEMA, l'utilisateur doit disposer de l'autorisation CREATE correspondante.To create an object specified within the CREATE SCHEMA statement, the user must have the corresponding CREATE permission.

Pour spécifier un autre utilisateur comme propriétaire du schéma à créer, l'appelant doit avoir l'autorisation IMPERSONATE sur cet utilisateur.To specify another user as the owner of the schema being created, the caller must have IMPERSONATE permission on that user. 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.If a database role is specified as the owner, the caller must have one of the following: membership in the role or ALTER permission on the role.

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éé.For the backward-compatible syntax, no permissions to CREATE SCHEMA are checked because no schema is being created.

ExemplesExamples

R.A. Création d’un schéma et octroi d’autorisationsCreating a schema and granting permissions

L'exemple suivant crée le schéma Sprockets détenu par Annik qui contient la table NineProngs.The following example creates schema Sprockets owned by Annik that contains table NineProngs. L'instruction accorde SELECT à Mandar et refuse SELECT à Prasanna.The statement grants SELECT to Mandar and denies SELECT to Prasanna. Remarquez que Sprockets et NineProngs sont créés dans une même instruction.Note that Sprockets and NineProngs are created in a single statement.

USE AdventureWorks2012;  
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 (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse

B.B. Création d’un schéma et d’une table dans le schémaCreating a schema and a table in the schema

L’exemple suivant crée un schéma Sales, puis une table Sales.Region dans ce schéma.The following example creates schema Sales and then creates a table Sales.Region in that schema.

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

C.C. Définition du propriétaire d’un schémaSetting the owner of a schema

L’exemple suivant crée un schéma Production appartenant à Mary.The following example creates a schema Production owned by Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Voir aussiSee Also

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