ALTER 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

Transfere um protegível entre esquemas.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

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 de um esquema no banco de dados atual para o qual o protegível será movido. Não pode ser SYS nem INFORMATION_SCHEMA.

<entity_type>
É a classe da entidade para a qual o proprietário está sendo alterado. Objeto é o padrão.

securable_name
É o nome de uma ou duas partes de um protegível no escopo do esquema a ser movido para o esquema.

Comentários

Os usuários e esquemas são completamente separados.

ALTER SCHEMA só pode ser usado para mover protegíveis entre esquemas no mesmo banco de dados. Para alterar ou descartar um protegível dentro de um esquema, use a instrução ALTER ou DROP específica para esse protegível.

Se o nome de uma parte for usado para securable_name, as regras de resolução de nomes atualmente em vigor serão usadas para localizar o protegível.

Todas as permissões associadas ao protegível serão descartadas quando o protegível for movido para o novo esquema. Se o proprietário do protegível tiver sido definido explicitamente, o proprietário permanecerá inalterado. Se o proprietário do protegível tiver sido definido como SCHEMA OWNER, o proprietário permanecerá como SCHEMA OWNER; entretanto, após a movimentação, SCHEMA OWNER reconhecerá o proprietário do novo esquema. O principal_id do novo proprietário será NULL.

A movimentação de um procedimento armazenado, uma função, uma exibição ou um gatilho não alterará o nome do esquema, se presente, do objeto correspondente na coluna de definição da exibição do catálogo sql_modules ou obtido com a função interna OBJECT_DEFINITION. Portanto, recomendamos que ALTER SCHEMA não seja usado para mover esses tipos de objeto. Em vez disso, remova e recrie o objeto em seu novo esquema.

A movimentação de um objeto, como uma tabela ou um sinônimo, não atualizará automaticamente as referências a esse objeto. É necessário modificar manualmente todos os objetos que referenciam o objeto transferido. Por exemplo, se você mover uma tabela e essa tabela for referenciada em um gatilho, será necessário modificar o gatilho para que ele reflita o novo nome do esquema. Use sys.sql_expression_dependencies para listar as dependências do objeto antes de movê-lo.

Para alterar o esquema de uma tabela usando o SQL Server Management Studio, no Pesquisador de Objetos, clique com o botão direito do mouse na tabela e, em seguida, clique em Design. Pressione F4 para abrir a janela Propriedades. Na caixa Esquema, selecione um novo esquema.

O ALTER SCHEMA usa um bloqueio no nível 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).

Permissões

Para transferir um protegível de outro esquema, o usuário atual deve ter permissão CONTROL sobre o protegível (não esquema) e permissão ALTER sobre o esquema de destino.

Se o protegível tiver uma especificação EXECUTE AS OWNER e o proprietário estiver definido como SCHEMA OWNER, o usuário também deverá ter a permissão IMPERSONATE no proprietário do esquema de destino.

Todas as permissões associadas ao protegível que estão sendo transferidas serão descartadas após o deslocamento.

Exemplos

a. Transferindo a propriedade de uma tabela

O exemplo a seguir modifica o esquema HumanResources transferindo a tabela Address do esquema Person para o esquema HumanResources.

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

B. Transferindo a propriedade de um tipo

O exemplo a seguir cria um tipo no esquema Production e, em seguida, transfere o tipo para o esquema 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  

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

C. Transferindo a propriedade de uma tabela

O exemplo a seguir cria uma tabela Region no esquema dbo, cria um esquema Sales e, em seguida, move a tabela Region do esquema dbo para o esquema 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  

Consulte Também

CREATE SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
EVENTDATA (Transact-SQL)