CREATE SCHEMA (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Cria um esquema no banco de dados atual. 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.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

schema_name
É o nome pelo qual o esquema é identificado no banco de dados.

AUTHORIZATION owner_name
Especifica o nome da entidade de segurança no nível de banco de dados que possuirá o esquema. Essa entidade de segurança pode possuir outros esquemas e pode não usar o esquema atual como esquema padrão.

table_definition
Especifica uma instrução CREATE TABLE que cria uma tabela no esquema. A entidade de segurança que executa essa instrução deve ter a permissão CREATE TABLE no banco de dados atual.

view_definition
Especifica uma instrução CREATE VIEW que cria uma exibição no esquema. A entidade de segurança que executa essa instrução deve ter a permissão CREATE VIEW no banco de dados atual.

grant_statement
Especifica uma instrução GRANT que concede permissões em qualquer item protegível, exceto no esquema novo.

revoke_statement
Especifica uma instrução REVOKE que revoga permissões em qualquer item protegível, exceto no esquema novo.

deny_statement
Especifica uma instrução DENY que nega permissões em qualquer item protegível, exceto no esquema novo.

Comentários

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. A instrução não causa um erro, mas não cria uma esquema.

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. Essa instrução deve ser executada como um lote separado. Os objetos criados pela instrução CREATE SCHEMA são criados no esquema que está sendo criado.

As transações CREATE SCHEMA são atômicas. 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.

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. Nesse caso, a exibição mencionada deve ser criada antes da exibição que a menciona.

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. Além disso, as instruções CREATE TABLE podem declarar chaves estrangeiras definidas posteriormente na instrução CREATE SCHEMA.

Observação

As instruções CREATE SCHEMA oferecem suporte para DENY e REVOKE. As cláusulas DENY e REVOKE serão executadas na ordem em que aparecem na instrução CREATE SCHEMA.

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. Isso requer permissões adicionais, conforme descrito na seção “Permissões”, posteriormente neste tópico.

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. Os objetos criados em um esquema são de propriedade do proprietário do esquema e têm principal_id NULL em 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.

Cuidado

A partir do SQL Server 2005, o comportamento de esquemas mudou. 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. 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. Nesses bancos de dados você deve usar as exibições do catálogo novas. As exibições do catálogo novas levam em conta a separação de entidades e esquemas apresentada no SQL Server 2005. Para mais informações sobre exibições do catálogo, consulte Exibições do catálogo (Transact-SQL).

Esquema implícito e criação de usuário

Observação

A ID do Microsoft Entra era anteriormente conhecida como Azure Active Directory (Azure AD).

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). Isso pode ocorrer nas seguintes situações:

  • Um logon tem privilégios CONTROL SERVER.

  • 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).

  • Um usuário do Microsoft Entra 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 Microsoft Entra que tem uma conta de usuário de banco de dados (uma entidade de banco de dados para o grupo Microsoft Entra).

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. 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 Server (o nome de logon de autenticação do SQL Server ou o nome de usuário do Windows).

Esse comportamento é necessário para permitir que usuários com base em grupos do Windows criem e possuam objetos. No entanto, isso pode resultar na criação não intencional de esquemas e usuários. 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. Ou declare explicitamente um esquema existente ao criar objetos em um banco de dados usando nomes de objetos de duas ou três partes.

Observação

A criação implícita de um usuário do Microsoft Entra não é possível no Banco de dados SQL. Como a criação de um usuário do Microsoft Entra a partir de um provedor externo deve verificar o status do usuário na ID do Microsoft Entra, a criação do usuário falhará com o erro 2760: O nome de esquema especificado "<user_name@domain>" não existe ou você não tem permissão para usá-lo. E, em seguida, erro 2759: CREATE SCHEMA falhou devido a erros anteriores. Tentativas de criar ou alterar esquemas resultarão no erro 15151: Não é possível localizar o usuário '', porque ele não existe ou você não tem permissão., também seguido pelo erro 2759. Para contornar esses erros, crie o usuário do Microsoft Entra de um provedor externo ou altere o grupo Microsoft Entra para atribuir um esquema padrão. Em seguida, execute novamente a instrução criando o objeto.

No ponto de extremidade da análise SQL e no Armazém no Microsoft Fabric, os nomes de esquema não podem conter / ou \ terminar com um .arquivo .

Aviso de substituição

Atualmente, a compatibilidade com versões anteriores oferece suporte para instruções CREATE SCHEMA que não especificam um nome de esquema. 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. 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. Essa funcionalidade será removida em versões futuras do SQL Server.

Permissões

Requer a permissão CREATE SCHEMA no banco de dados.

Para criar um objeto especificado na instrução CREATE SCHEMA, o usuário deve ter a permissão CREATE correspondente.

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. 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.

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.

Exemplos

a. Criando um esquema e concedendo permissões

O exemplo a seguir cria o esquema Sprockets possuído por Annik que contém a tabela NineProngs. A instrução concede SELECT a Mandar e nega SELECT a Prasanna. Sprockets e NineProngs são criados em uma única instrução.

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   

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

B. Criando um esquema e uma tabela no esquema

O exemplo a seguir cria um o esquema Sales e, em seguida, cria uma tabela Sales.Region nesse esquema.

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

C. Definindo o proprietário de um esquema

O exemplo a seguir cria um esquema Production pertencente a Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Consulte Também

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)
Criar um esquema de banco de dados