Share via


Utilizzo e modifica di istanze di tipi definiti dall'utente

Data aggiornamento: 5 dicembre 2005

È possibile utilizzare tipi definiti dall'utente eseguendo le operazioni seguenti:

  • Creazione di tabelle con colonne di tipo definito dall'utente
  • Inserimento e modifica dei valori delle colonne di tipo definito dall'utente
  • Utilizzo di un tipo definito dall'utente come variabile o parametro

Creazione di tabelle con colonne di tipo definito dall'utente

È possibile creare una tabella con colonne di tipo definito dall'utente indicando un nome di colonna e facendo riferimento al nome di tipo. Questa operazione è simile alla creazione di colonne composte da tipi di dati di sistema o tipi alias. Per creare una colonna per un tipo Common Language Runtime (CLR) definito dall'utente, è necessario disporre dell'autorizzazione REFERENCES sul tipo.

Per creare una tabella con colonne di tipo definito dall'utente

Inserimento e modifica dei valori delle colonne di tipo definito dall'utente

È possibile inserire e modificare i valori delle colonne e modificare i valori di variabili e parametri di tipo definito dall'utente.

[!NOTA] Non è possibile modificare i tipi definiti dall'utente dopo averli creati, in quanto le modifiche potrebbero rendere non validi i dati di tabelle o indici. Per modificare un tipo, è necessario eliminarlo e quindi ricrearlo oppure eseguire un'istruzione ALTER ASSEMBLY utilizzando la clausola WITH UNCHECKED DATA. Per ulteriori informazioni, vedere ALTER ASSEMBLY (Transact-SQL).

È possibile inserire o modificare i valori per le colonne di tipo definito dall'utente eseguendo le operazioni seguenti:

  • Specificare un valore in un tipo di dati di sistema di SQL Server, a condizione che i tipi definiti dall'utente supportino la conversione implicita o esplicita da quel tipo. Nell'esempio seguente viene illustrato come aggiornare un valore in una colonna del tipo Point definito dall'utente eseguendo la conversione esplicita da una stringa:

    UPDATE Cities
    SET Location = CONVERT(Point, '12.3:46.2')
    WHERE Name = 'Anchorage'
    
  • Richiamare un metodo, contrassegnato come mutatore, del tipo definito dall'utente per eseguire l'aggiornamento. Nell'esempio seguente viene richiamato un metodo mutatore di tipo point denominato SetXY che consente di aggiornare lo stato dell'istanza del tipo:

    UPDATE Cities
    SET Location.SetXY(23.5, 23.5)
    WHERE Name = 'Anchorage'
    

    [!NOTA] SQL Server restituisce un errore se un metodo mutatore viene richiamato su un valore Transact-SQL Null oppure se un nuovo valore prodotto da un metodo mutatore è Null.

  • Modificare il valore di una proprietà o di un campo pubblico del tipo definito dall'utente. È necessario che l'espressione che fornisce il valore possa essere convertita in modo implicito nel tipo della proprietà. Nell'esempio seguente viene modificato il valore della proprietà X del tipo di dati point definito dall'utente:

    UPDATE Cities
    SET Location.X = 23.5
    WHERE Name = 'Anchorage'
    

    Per modificare proprietà diverse della stessa colonna di tipo definito dall'utente, applicare più istruzioni UPDATE o richiamare un metodo mutatore del tipo.

Nell'esempio seguente vengono inseriti valori del tipo Point nella tabella:

INSERT INTO Cities (Name, Location)
VALUES ('Anchorage', CONVERT(Point, '23.5, 23.5'))

Per inserire un valore del tipo definito dall'utente in una tabella o una vista

  • INSERT (Transact-SQL)
  • Per aggiornare un valore del tipo definito dall'utente in una tabella o una vista

UPDATE (Transact-SQL)

Utilizzo di un tipo definito dall'utente come variabile o parametro

È possibile dichiarare una variabile Transact-SQL oppure il parametro di una funzione o procedura Transact-SQL o Microsoft .NET Framework affinché sia di un tipo definito dall'utente. Sono applicabili le regole seguenti:

  • È necessario disporre dell'autorizzazione EXECUTE per il tipo specifico.
  • Se si crea una funzione, una stored procedure o un trigger contenente una dichiarazione di tipo definito dall'utente con associazione di schema, è necessario disporre dell'autorizzazione REFERENCES per il tipo specifico.

Se si utilizza un nome composto da un'unica parte, SQL Server eseguirà la ricerca del riferimento al tipo nell'ordine seguente:

  1. Schema dell'utente corrente nel database corrente.
  2. Schema del database dbo nel database corrente.
  3. spazio di tipo di sistema nativo.

Per dichiarare un tipo definito dall'utente come variabile o parametro Transact-SQL di una funzione o di una procedura

Restrizioni sull'utilizzo dei tipi definiti dall'utente

Quando si creano o utilizzano tipi definiti dall'utente, considerare gli aspetti seguenti:

  • Non è possibile definire lunghezza, scala, precisione o altri metadati durante la creazione di un tipo definito dall'utente in SQL Server.
  • Non è possibile dichiarare una colonna, una variabile o un parametro come di un tipo definito dall'utente in un altro database. Per ulteriori informazioni, vedere Utilizzo di tipi definiti dall'utente tra database.
  • Per determinare se un tipo definito dall'utente è identico a uno definito in precedenza, non confrontare l'ID di tipo, in quanto è un elemento valido solo per la durata del tipo definito dall'utente e potrebbe essere recuperato. Confrontare invece il nome di tipo CLR, il nome dell'assembly in quattro parti e i byte dell'assembly.
  • Le colonne sql_variant non possono includere istanze di un tipo definito dall'utente.
  • I tipi definiti dall'utente non possono essere utilizzati come valori predefiniti in procedure, funzioni o trigger CLR o in funzioni di partizione.
  • Non è possibile fare riferimento a tipi definiti dall'utente in colonne calcolate di variabili table.

Vedere anche

Concetti

Utilizzo di tipi CLR definiti dall'utente

Altre risorse

CLR User-Defined Types

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

5 dicembre 2005

Nuovo contenuto
  • Nella sezione "Restrizioni sull'utilizzo dei tipi definiti dall'utente" aggiunta dell'indicazione che non è possibile fare riferimento a tipi definiti dall'utente nelle colonne calcolate delle variabili table.