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

APLICA-SE A: simSQL Server (a partir do 2008) simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Cria um esquema no banco de dados atual.Creates a schema in the current database. A transação CREATE SCHEMA também pode criar tabelas e exibições no novo esquema e definir permissões GRANT, DENY ou REVOKE nesses objetos.The CREATE SCHEMA transaction can also create tables and views within the new schema, and set GRANT, DENY, or REVOKE permissions on those objects.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

-- 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 SQL Data Warehouse and Parallel Data Warehouse  
  
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

ArgumentosArguments

schema_nameschema_name
É o nome pelo qual o esquema é identificado no banco de dados.Is the name by which the schema is identified within the database.

AUTHORIZATION owner_nameAUTHORIZATION owner_name
Especifica o nome da entidade de segurança no nível de banco de dados que possuirá o esquema.Specifies the name of the database-level principal that will own the schema. Essa entidade de segurança pode possuir outros esquemas e pode não usar o esquema atual como esquema padrão.This principal may own other schemas, and may not use the current schema as its default schema.

table_definitiontable_definition
Especifica uma instrução CREATE TABLE que cria uma tabela no esquema.Specifies a CREATE TABLE statement that creates a table within the schema. A entidade de segurança que executa essa instrução deve ter a permissão CREATE TABLE no banco de dados atual.The principal executing this statement must have CREATE TABLE permission on the current database.

view_definitionview_definition
Especifica uma instrução CREATE VIEW que cria uma exibição no esquema.Specifies a CREATE VIEW statement that creates a view within the schema. A entidade de segurança que executa essa instrução deve ter a permissão CREATE VIEW no banco de dados atual.The principal executing this statement must have CREATE VIEW permission on the current database.

grant_statementgrant_statement
Especifica uma instrução GRANT que concede permissões em qualquer item protegível, exceto no esquema novo.Specifies a GRANT statement that grants permissions on any securable except the new schema.

revoke_statementrevoke_statement
Especifica uma instrução REVOKE que revoga permissões em qualquer item protegível, exceto no esquema novo.Specifies a REVOKE statement that revokes permissions on any securable except the new schema.

deny_statementdeny_statement
Especifica uma instrução DENY que nega permissões em qualquer item protegível, exceto no esquema novo.Specifies a DENY statement that denies permissions on any securable except the new schema.

RemarksRemarks

Observação

As instruções que contêm CREATE SCHEMA AUTHORIZATION, mas não especificam um nome, são permitidas somente para compatibilidade com versões anteriores.Statements that contain CREATE SCHEMA AUTHORIZATION but do not specify a name, are permitted for backward compatibility only. A instrução não causa um erro, mas não cria uma esquema.The statement does not cause an error, but does not create a schema.

CREATE SCHEMA pode criar um esquema, as tabelas e as exibições contidas e as permissões GRANT, REVOKE ou DENY em qualquer item protegível em uma única instrução.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. Essa instrução deve ser executada como um lote separado.This statement must be executed as a separate batch. Os objetos criados pela instrução CREATE SCHEMA são criados no esquema que está sendo criado.Objects created by the CREATE SCHEMA statement are created inside the schema that is being created.

As transações CREATE SCHEMA são atômicas.CREATE SCHEMA transactions are atomic. Se algum erro ocorrer durante a execução de uma instrução CREATE SCHEMA, nenhum item protegível especificado será criado e nenhuma permissão será concedida.If any error occurs during the execution of a CREATE SCHEMA statement, none of the specified securables are created and no permissions are granted.

Os itens protegíveis criados por CREATE SCHEMA podem ser listados em qualquer ordem, com exceção das exibições que fazem referência a outras exibições.Securables to be created by CREATE SCHEMA can be listed in any order, except for views that reference other views. Nesse caso, a exibição mencionada deve ser criada antes da exibição que a menciona.In that case, the referenced view must be created before the view that references it.

Portanto, uma instrução GRANT pode conceder permissões em um objeto antes que o objeto propriamente dito seja criado ou uma instrução CREATE VIEW pode aparecer antes das instruções CREATE TABLE que criam as tabelas mencionadas pela exibição.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. Além disso, as instruções CREATE TABLE podem declarar chaves estrangeiras definidas posteriormente na instrução CREATE SCHEMA.Also, CREATE TABLE statements can declare foreign keys to tables that are defined later in the CREATE SCHEMA statement.

Observação

As instruções CREATE SCHEMA oferecem suporte para DENY e REVOKE.DENY and REVOKE are supported inside CREATE SCHEMA statements. As cláusulas DENY e REVOKE serão executadas na ordem em que aparecem na instrução CREATE SCHEMA.DENY and REVOKE clauses will be executed in the order in which they appear in the CREATE SCHEMA statement.

A entidade de segurança que executa CREATE SCHEMA pode especificar outra entidade de segurança de banco de dados como o proprietário do esquema que está sendo criado.The principal that executes CREATE SCHEMA can specify another database principal as the owner of the schema being created. Isso requer permissões adicionais, conforme descrito na seção “Permissões”, posteriormente neste tópico.This requires additional permissions, as described in the "Permissions" section later in this topic.

O esquema novo é de propriedade de uma das seguintes entidades de segurança em nível de banco de dados: usuário de banco de dados, função de banco de dados ou função de aplicativo.The new schema is owned by one of the following database-level principals: database user, database role, or application role. Os objetos criados em um esquema são de propriedade do proprietário do esquema e têm principal_id NULL em sys.objects.Objects created within a schema are owned by the owner of the schema, and have a NULL principal_id in sys.objects. A propriedade dos objetos contidos pelo esquema pode ser transferida para qualquer entidade de segurança no nível de banco de dados, mas o proprietário do esquema sempre retém a permissão CONTROL nos objetos do esquema.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.

Cuidado

A partir do SQL Server 2005, o comportamento de esquemas mudou.Beginning with SQL Server 2005, the behavior of schemas changed. Como resultado, o código que pressupõe que esquemas sejam equivalentes a usuários de banco de dados pode não retornar mais resultados corretos.As a result, code that assumes that schemas are equivalent to database users may no longer return correct results. Exibições do catálogo antigas, incluindo sysobjects, não devem ser usadas em um banco de dados no qual uma das instruções DDL a seguir já tenha sido utilizada: 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. Nesses bancos de dados você deve usar as exibições do catálogo novas.In such databases you must instead use the new catalog views. As exibições do catálogo novas levam em conta a separação de entidades e esquemas apresentada no SQL Server 2005.The new catalog views take into account the separation of principals and schemas that was introduced in SQL Server 2005. Para mais informações sobre exibições do catálogo, consulte Exibições do catálogo (Transact-SQL).For more information about catalog views, see Catalog Views (Transact-SQL).

Esquema implícito e criação de usuárioImplicit Schema and User Creation

Em alguns casos, um usuário pode criar um banco de dados sem ter uma conta de usuário de banco de dados (uma entidade de banco de dados no banco de dados).In some cases a user can use a database without having a database user account (a database principal in the database). Isso acontece nas seguintes situações:This can happen in the following situations:

  • Um logon tem privilégios CONTROL SERVER.A login has CONTROL SERVER privileges.

  • Um usuário do Windows não tem uma conta de usuário de banco de dados individual (uma entidade de banco de dados no banco de dados), mas acessa um banco de dados como membro de um grupo do Windows que tem uma conta de usuário de banco de dados (uma entidade de banco de dados para o grupo do 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).

Quando um usuário sem uma conta de usuário de banco de dados cria um objeto sem especificar um esquema existente, uma entidade de banco de dados e um esquema padrão são automaticamente criados no banco de dados para esse usuário.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. A entidade de banco de dados e o esquema criados terão o mesmo nome que aquele usado pelo usuário ao se conectar ao SQL ServerSQL Server (o nome de logon de autenticação do SQL ServerSQL Server ou o nome de usuário do 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).

Esse comportamento é necessário para permitir que usuários com base em grupos do Windows criem e possuam objetos.This behavior is necessary to allow users that are based on Windows groups to create and own objects. No entanto, isso pode resultar na criação não intencional de esquemas e usuários.However it can result in the unintentional creation of schemas and users. Para evitar criar usuários e esquemas implicitamente, sempre que possível crie entidades de banco de dados explicitamente e atribua um esquema padrão.To avoid implicitly creating users and schemas, whenever possible explicitly create database principals and assign a default schema. Ou declare explicitamente um esquema existente ao criar objetos em um banco de dados usando nomes de objetos de duas ou três partes.Or explicitly state an existing schema when creating objects in a database, using two or three-part object names.

Observação

A criação implícita de um usuário do Azure Active Directory não é possível no Banco de Dados SQLSQL Database.The implicit creation of an Azure Active Directory user is not possible on Banco de Dados SQLSQL Database. Como a criação de um usuário do Azure AD de um provedor externo precisa verificar o status de usuários no AAD, a criação do usuário falhará com o erro 2760: O nome do esquema especificado "<user_name@domain>" não existe ou você não tem permissão para usá-lo.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. E, em seguida, o erro 2759: Falha em CREATE SCHEMA devido a erros anteriores.And then error 2759: CREATE SCHEMA failed due to previous errors. Para resolver esses erros, crie o usuário do Azure AD por meio do provedor externo primeiro e, em seguida, execute novamente a instrução, criando o objeto.To work around these errors, create the Azure AD user from external provider first and then rerun the statement creating the object.

Aviso de substituiçãoDeprecation Notice

Atualmente, a compatibilidade com versões anteriores oferece suporte para instruções CREATE SCHEMA que não especificam um nome de esquema.CREATE SCHEMA statements that do not specify a schema name are currently supported for backward compatibility. Essas instruções não criam realmente um esquema no banco de dados, mas criam tabelas e exibições, além de concederem permissões.Such statements do not actually create a schema inside the database, but they do create tables and views, and grant permissions. As entidades de segurança não precisam da permissão CREATE SCHEMA para executar essa forma anterior de CREATE SCHEMA porque nenhum esquema está sendo criado.Principals do not need CREATE SCHEMA permission to execute this earlier form of CREATE SCHEMA, because no schema is being created. Essa funcionalidade será removida em versões futuras do SQL ServerSQL Server.This functionality will be removed from a future release of SQL ServerSQL Server.

PermissõesPermissions

Requer a permissão CREATE SCHEMA no banco de dados.Requires CREATE SCHEMA permission on the database.

Para criar um objeto especificado na instrução CREATE SCHEMA, o usuário deve ter a permissão CREATE correspondente.To create an object specified within the CREATE SCHEMA statement, the user must have the corresponding CREATE permission.

Para especificar outro usuário como o proprietário do esquema que está sendo criado, o chamador deve ter a permissão IMPERSONATE no usuário em questão.To specify another user as the owner of the schema being created, the caller must have IMPERSONATE permission on that user. Se uma função de banco de dados for especificada como o proprietário, o chamador deve ter o seguinte: associação na função ou a permissão ALTER na função.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.

Observação

Para a sintaxe compatível com versões anteriores, nenhuma permissão para CREATE SCHEMA é necessária porque nenhum esquema está sendo criado.For the backward-compatible syntax, no permissions to CREATE SCHEMA are checked because no schema is being created.

ExemplosExamples

A.A. Criando um esquema e concedendo permissõesCreating a schema and granting permissions

O exemplo a seguir cria o esquema Sprockets possuído por Annik que contém a tabela NineProngs.The following example creates schema Sprockets owned by Annik that contains table NineProngs. A instrução concede SELECT a Mandar e nega SELECT a Prasanna.The statement grants SELECT to Mandar and denies SELECT to Prasanna. Sprockets e NineProngs são criados em uma única instrução.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   

Exemplos: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

b.B. Criando um esquema e uma tabela no esquemaCreating a schema and a table in the schema

O exemplo a seguir cria um o esquema Sales e, em seguida, cria uma tabela Sales.Region nesse esquema.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. Definindo o proprietário de um esquemaSetting the owner of a schema

O exemplo a seguir cria um esquema Production pertencente a Mary.The following example creates a schema Production owned by Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Consulte TambémSee 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)
Criar um esquema de banco de dadosCreate a Database Schema