CREATE SCHEMA (Transact-SQL)
Crea uno schema nel database corrente. La transazione CREATE SCHEMA può anche creare tabelle e viste all'interno del nuovo schema e impostare le autorizzazioni GRANT, DENY o REVOKE per tali oggetti.
Convenzioni della sintassi Transact-SQL
Sintassi
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
}
Argomenti
schema_name
Nome con il quale viene identificato lo schema all'interno del database.AUTHORIZATION owner_name
Specifica il nome dell'entità a livello di database che sarà proprietaria dello schema. L'entità può essere proprietaria di altri schemi e non può utilizzare lo schema corrente come schema predefinito.table_definition
Specifica un'istruzione CREATE TABLE che crea una tabella all'interno dello schema. L'entità che esegue l'istruzione deve disporre dell'autorizzazione CREATE TABLE per il database corrente.view_definition
Specifica un'istruzione CREATE VIEW che crea una vista all'interno dello schema. L'entità che esegue l'istruzione deve disporre dell'autorizzazione CREATE VIEW per il database corrente.grant_statement
Specifica un'istruzione GRANT che concede le autorizzazioni per ogni entità a protezione diretta ad eccezione del nuovo schema.revoke_statement
Specifica un'istruzione REVOKE che revoca le autorizzazioni per ogni entità a protezione diretta ad eccezione del nuovo schema.deny_statement
Specifica un'istruzione DENY che nega le autorizzazioni per ogni entità a protezione diretta ad eccezione del nuovo schema.
Osservazioni
[!NOTA]
Le istruzioni che contengono CREATE SCHEMA AUTHORIZATION ma non specificano un nome sono supportate unicamente per compatibilità con le versioni precedenti.
CREATE SCHEMA consente di creare uno schema, le tabelle e le viste in esso contenute e concedere, revocare o negare le autorizzazioni per ogni entità a protezione diretta in una singola istruzione. Questa istruzione deve essere eseguita come batch separato. Gli oggetti creati tramite l'istruzione CREATE SCHEMA vengono creati all'interno dello schema di cui è in corso la creazione.
Le transazioni CREATE SCHEMA sono atomiche. In caso di errori durante l'esecuzione di un'istruzione CREATE SCHEMA, non verrà creata alcuna entità a protezione diretta e non verranno concesse autorizzazioni.
Le entità a protezione diretta da creare tramite CREATE SCHEMA possono essere elencate in qualsiasi ordine, ad eccezione delle viste che fanno riferimento ad altre viste. In questo caso, la vista a cui viene fatto riferimento deve essere creata prima della vista che vi fa riferimento.
Un'istruzione GRANT può pertanto concedere l'autorizzazione per un oggetto prima che l'oggetto stesso venga creato, mentre un'istruzione CREATE VIEW può essere visualizzata prima delle istruzioni CREATE TABLE che creano le tabelle a cui fa riferimento la vista. Le istruzioni CREATE TABLE, inoltre, possono dichiarare chiavi esterne per le tabelle definite successivamente nell'istruzione CREATE SCHEMA.
[!NOTA]
Le clausole DENY e REVOKE sono supportate nelle istruzioni CREATE SCHEMA. Le clausole DENY e REVOKE vengono eseguite nell'ordine in cui compaiono nell'istruzione CREATE SCHEMA.
L'entità che esegue CREATE SCHEMA può specificare un'altra entità di database come proprietario dello schema di cui è in corso la creazione. A tale scopo, sono richieste ulteriori autorizzazioni, come illustrato nella sezione "Autorizzazioni" più avanti in questo argomento.
Il nuovo schema è di proprietà di una delle seguenti entità a livello di database: utente di database, ruolo di database o ruolo applicazione. Gli oggetti creati all'interno di uno schema appartengono al proprietario dello schema e hanno un valore NULL per principal_id in sys.objects. La proprietà degli oggetti contenuti in uno schema può essere trasferita a qualsiasi entità a livello di database, ma il proprietario dello schema mantiene sempre l'autorizzazione CONTROL per gli oggetti all'interno dello schema.
Attenzione |
---|
A partire da SQL Server 2005, il funzionamento degli schemi è stato modificato. È pertanto possibile che il codice in cui gli schemi vengono considerati equivalenti agli utenti del database non restituisca risultati corretti. Non utilizzare le viste del catalogo delle versioni precedenti, inclusa sysobjects, nei database in cui sia già stata utilizzata una delle istruzioni DDL seguenti: 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. In tali database è invece necessario utilizzare le nuove viste del catalogo. Le nuove viste del catalogo prendono in considerazione la separazione tra entità e schemi introdotta in SQL Server 2005. Per ulteriori informazioni sulle viste del catalogo, vedere Viste del catalogo (Transact-SQL). |
Quando si crea un oggetto di database, se si specifica un'entità di dominio valida (utente o gruppo) come proprietario dell'oggetto, l'entità di dominio sarà aggiunta al database come uno schema. Il proprietario del nuovo schema sarà l'entità di dominio.
Informativa sulle funzionalità deprecate
Le istruzioni CREATE SCHEMA che non specificano un nome di schema sono attualmente supportate per compatibilità con le versioni precedenti. Tali istruzioni in realtà non creano uno schema all'interno del database, ma creano tabelle e viste e concedono autorizzazioni. Le entità non necessitano dell'autorizzazione CREATE SCHEMA per eseguire questa versione meno recente di CREATE SCHEMA, perché non viene creato alcuno schema. Questa funzionalità verrà rimossa a partire da una delle prossime versioni di SQL Server.
Autorizzazioni
È richiesta l'autorizzazione CREATE SCHEMA per il database.
Per creare un oggetto specificato all'interno dell'istruzione CREATE SCHEMA, l'utente deve disporre dell'autorizzazione CREATE corrispondente.
Per specificare un altro utente come proprietario dello schema che viene creato, l'utente deve disporre dell'autorizzazione IMPERSONATE per quell'utente. Se si specifica un ruolo di database come proprietario, il chiamante deve disporre dell'appartenenza al ruolo oppure dell'autorizzazione ALTER per il ruolo.
[!NOTA]
Per motivi di compatibilità con la sintassi precedente, non vengono controllate le autorizzazioni per CREATE SCHEMA perché non viene creato alcuno schema.
Esempi
Nell'esempio seguente viene creato lo schema Sprockets, di proprietà di Annik, contenente la tabella NineProngs. L'istruzione concede SELECT a Mandar e nega SELECT a Prasanna. Si noti che Sprockets e NineProngs vengono creati in una singola istruzione.
USE AdventureWorks2012;
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