Condividi tramite


Tipi di tabella definiti dall'utente

In SQL Server 2008, un tipo di tabella definito dall'utente è un tipo definito dall'utente che rappresenta la definizione di una struttura della tabella. È possibile utilizzare un tipo di tabella definito dall'utente per dichiarare i parametri valutati a livello di tabella per le stored procedure o le funzioni oppure per dichiarare le variabili della tabella da utilizzare in un batch o nel corpo di una stored procedure o funzione. Per ulteriori informazioni sulla definizione di una struttura della tabella, vedere CREATE TABLE (Transact-SQL).

Per creare un tipo di tabella definito dall'utente, utilizzare l'istruzione CREATE TYPE. Per assicurare che i dati in un tipo di tabella definito dall'utente soddisfino i requisiti specifici, è possibile creare vincoli univoci e chiavi primarie sul tipo di tabella definito dall'utente.

Per informazioni sulle viste del catalogo associate ai tipi definiti dall'utente, vedere sys.types e sys.table_types.

Restrizioni

I tipi di tabella definiti dall'utente hanno le restrizioni seguenti:

  • Un tipo di tabella definito dall'utente non può essere utilizzato come colonna in una tabella o come campo in un tipo definito dall'utente strutturato.

  • Tipi alias basati su un tipo di tabella definito dall'utente

  • L'opzione [NOT FOR REPLICATION] non è consentita.

  • I vincoli CHECK richiedono che una colonna calcolata sia persistente.

  • La chiave primaria sulle colonne calcolate deve essere PERSISTED e NOT NULL.

  • Un indice non cluster non può essere creato su un tipo di tabella definito dall'utente a meno che l'indice non sia il risultato della creazione di un vincolo PRIMARY KEY o UNIQUE sul tipo di tabella definito dall'utente. SQL Server applica qualsiasi vincolo UNIQUE o PRIMARY KEY utilizzando un indice.

  • La definizione del tipo di tabella definito dall'utente non può essere modificata dopo la sua creazione.

  • Le funzioni definite dall'utente non possono essere chiamate all'interno della definizione delle colonne calcolate di un tipo di tabella definito dall'utente.

Sicurezza

Le autorizzazioni per i tipi di tabella definiti dall'utente seguono il modello di sicurezza dell'oggetto per SQL Server, utilizzando le parole chiave di Transact-SQL seguenti: CREATE, GRANT, DENY, ALTER, CONTROL, TAKE OWNERSHIP, REFERENCES, EXECUTE, VIEW DEFINITION e REVOKE.

Nota

L'autorizzazione CONTROL su un tipo di tabella implica tutte le altre autorizzazioni sul tipo di tabella.

Un'associazione allo schema viene stabilita quando la funzione nella quale si verifica l'istruzione DECLARE specifica WITH SCHEMABINDING. L'autorizzazione REFERENCES è richiesta sul tipo di tabella definito dall'utente quando il tipo di tabella è un parametro in una routine o quando viene specificato SCHEMABINDING. In tutti gli altri casi, non viene stabilita alcuna associazione allo schema e l'autorizzazione REFERENCES non è necessaria nel tipo di tabella definito dall'utente.

Per dichiarare una variabile della tabella che utilizza un tipo di tabella definito dall'utente, è necessaria l'autorizzazione EXECUTE su tale tipo di tabella.

Nota

L'opzione CASCADE non viene applicata per le autorizzazioni del tipo di tabella definite dall'utente, poiché un tipo di tabella definito dall'utente non può essere incorporato in alcuna definizione del tipo.

Esempi

A. Creazione di un tipo di tabella definito dall'utente

Nell'esempio seguente viene illustrata la modalità di creazione di un tipo di tabella definito dall'utente.

USE AdventureWorks2008R2;
GO

/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE 
( LocationName VARCHAR(50)
, CostRate INT );
GO

B. Revoca delle autorizzazioni su un tipo di tabella definito dall'utente

Nell'esempio seguente viene descritta la revoca delle autorizzazioni in uno specifico tipo di tabella definito dall'utente. L'autorizzazione REFERENCES viene revocata da un utente denominato JoAnna nel tipo della tabella definito dall'utente CustomerListType, che si trova all'interno dello schema relazionale mySchema in database myDatabase.

USE myDatabase;
GO
REVOKE REFERENCES ON TYPE::[mySchema].[CustomerListType] FROM JoAnna;
GO