Partilhar via


ESQUEMA ALTER (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Transfere um protegível entre esquemas.

Transact-SQL convenções de sintaxe

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

Argumentos

schema_name

O esquema de destino no banco de dados atual. O protegível é movido para este esquema. Não pode ser SYS ou INFORMATION_SCHEMA.

<entity_type>

A classe da entidade para a qual o proprietário está sendo alterado. Object é o padrão.

securable_name

O nome de uma ou duas partes de um escopo de esquema protegível a ser movido para o esquema.

Observações

Usuários e esquemas são completamente separados. Os esquemas não são equivalentes aos usuários do banco de dados. Use as exibições do catálogo do sistema para identificar quaisquer diferenças entre os usuários e esquemas do banco de dados.

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

Se um 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 seguro.

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

Importante

Se você usar ALTER SCHEMA para transferir um procedimento armazenado, função, exibição ou gatilho para outro esquema, ele não alterará o nome do esquema, se presente, do objeto na definition coluna da exibição de catálogo do sys.sql_modules ou no resultado da função interna OBJECT_DEFINITION . Portanto, ALTER SCHEMA não deve ser usado para mover esses tipos de objeto. Em vez disso, solte e recrie o objeto em seu novo esquema.

Mover um objeto, como uma tabela ou sinônimo, não atualizará automaticamente as referências a esse objeto. Você deve modificar todos os objetos que fazem referência ao objeto transferido manualmente. Por exemplo, se você mover uma tabela e essa tabela for referenciada em um gatilho, deverá modificá-lo para refletir o novo nome do esquema. Use sys.sql_expression_dependencies para listar dependências no 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 selecione Design. Pressione F4 para abrir a janela Propriedades. Na caixa Esquema , selecione um novo esquema.

ALTER SCHEMA usa um bloqueio de nível de esquema.

Atenção

No ponto de extremidade de análise do Fabric SQL, não há suporte para a transferência de uma tabela entre esquemas via T-SQL. Isso pode afetar negativamente a operação de sincronização entre o OneLake e o ponto de extremidade de análise SQL.

Permissões

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

Se o protegível tiver uma especificação EXECUTAR COMO PROPRIETÁRIO e o proprietário estiver definido como PROPRIETÁRIO DO ESQUEMA, o usuário também deverá ter permissão IMPERSONATE no proprietário do esquema de destino.

Todas as permissões associadas ao protegível que está sendo transferido são descartadas quando ele é movido.

Exemplos

Um. Transferir a propriedade de uma tabela

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

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

B. Transferir a propriedade de um tipo

O exemplo a Production seguir cria um tipo no esquema e, em seguida, transfere o tipo para o Person esquema.

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 and Analytics Platform System (PDW)

C. Transferir a propriedade de uma tabela

O exemplo a Region seguir cria uma tabela dbo no esquema, cria um Sales esquema e, em seguida, move a Region tabela do dbo esquema para o Sales esquema.

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