Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Piattaforma di strumenti analitici (PDW)
Endpoint di analisi SQL in Microsoft Fabric
Warehouse 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