Condividi tramite


ALTER SCHEMA (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)Endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Trasferisce un'entità a protezione diretta da uno schema a un altro.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

schema_name

Schema di destinazione nel database corrente. L'entità a protezione diretta viene spostata in questo schema. Non può essere SYS o INFORMATION_SCHEMA.

<entity_type>

Classe dell'entità per cui viene modificato il proprietario. L'oggetto rappresenta l'impostazione predefinita.

securable_name

Nome in una o due parti di un'entità a protezione diretta con ambito schema da spostare nello schema.

Osservazioni:

Utenti e schemi sono completamente distinti. Gli schemi non sono equivalenti agli utenti del database. Usare le viste del catalogo di sistema per identificare eventuali differenze tra gli utenti del database e gli schemi.

È possibile utilizzare ALTER SCHEMA solo per spostare le entità a protezione diretta tra schemi presenti nello stesso database. Per modificare o eliminare un'entità a sicurezza diretta all'interno di uno schema, utilizzare l'istruzione ALTER o DROP specifica dell'entità a sicurezza diretta desiderata.

Se per securable_name viene usato un nome in una parte, verranno usate le regole di risoluzione dei nomi attualmente valide per individuare l'entità a protezione diretta.

Tutte le autorizzazioni associate all'entità a protezione diretta vengono eliminate quando l'entità a protezione diretta viene spostata nel nuovo schema. Se il proprietario dell'entità a protezione diretta è stato impostato in modo esplicito, il proprietario rimane invariato. Se impostato su SCHEMA OWNER, il proprietario dell'entità a protezione diretta rimarrà SCHEMA OWNER. Tuttavia, in seguito allo spostamento SCHEMA OWNER verrà risolto nel nome del proprietario del nuovo schema. L'oggetto principal_id del nuovo proprietario sarà NULL.

Importante

Se si usa ALTER SCHEMA per trasferire una stored procedure, una funzione, una vista o un trigger in un altro schema, non modificherà il nome dello schema, se presente, dell'oggetto nella definition colonna della vista del catalogo sys.sql_modules o nel risultato della funzione predefinita OBJECT_DEFINITION . Pertanto, ALTER SCHEMA non deve essere utilizzato per spostare questi tipi di oggetto. In alternativa, eliminare e ricreare l'oggetto nel nuovo schema.

Lo spostamento di un oggetto, ad esempio una tabella o un sinonimo, non aggiorna automaticamente i riferimenti a tale oggetto. ed è necessario modificare manualmente tutti gli oggetti che fanno riferimento all'oggetto trasferito. Se, ad esempio, si sposta una tabella a cui viene fatto riferimento all'interno di un trigger, è necessario modificare il trigger in base al nuovo nome dello schema. Usare sys.sql_expression_dependencies per elencare le dipendenze dall'oggetto prima di spostarlo.

Per modificare lo schema di una tabella usando SQL Server Management Studio, in Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella e quindi scegliere Progettazione. Premere F4 per aprire la finestra Proprietà. Nella casella Schema selezionare un nuovo schema.

ALTER SCHEMA usa un blocco a livello di schema.

Attenzione

Nell'endpoint di analisi SQL dell'infrastruttura il trasferimento di una tabella tra schemi tramite T-SQL non è supportato. Può influire negativamente sull'operazione di sincronizzazione tra OneLake e l'endpoint di analisi SQL.

Autorizzazioni

Per trasferire un'entità a sicurezza diretta da un altro schema, l'utente deve disporre dell'autorizzazione CONTROL per l'entità (non per lo schema) e dell'autorizzazione ALTER per lo schema di destinazione.

Se l'entità a protezione diretta è associata a una specifica dell'istruzione EXECUTE AS OWNER e il proprietario è impostato su SCHEMA OWNER, l'utente deve avere anche l'autorizzazione IMPERSONATE per il proprietario dello schema di destinazione.

Tutte le autorizzazioni associate all'entità a protezione diretta in fase di trasferimento vengono eliminate al momento dello spostamento.

Esempi

R. Trasferire la proprietà di una tabella

Nell'esempio seguente viene modificato lo schema HumanResources mediante il trasferimento della tabella Address dello schema Person nello schema HumanResources.

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

B. Trasferire la proprietà di un tipo

Nell'esempio seguente viene creato un tipo nello schema Production, quindi il tipo viene trasferito nello schema 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  

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

C. Trasferire la proprietà di una tabella

Nell'esempio seguente viene creata una tabella Region nello schema dbo, viene creato uno schema Sales e viene spostata la tabella Region dallo schema dbo allo schema 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