Tipi CLR definiti dall'utente
SQL Server consente di creare oggetti di database programmati in un assembly creato in Common Language Runtime (CLR) di .NET Framework. Tra gli oggetti di database che consentono l'utilizzo del ricco modello di programmazione offerto da CLR vi sono trigger, stored procedure, funzioni, funzioni di aggregazione e tipi.
Nota
Per impostazione predefinita, l'esecuzione di codice CLR in SQL Server è disattivata. CRL può essere abilitato utilizzando la stored procedure di sistema sp_configure.
A partire da SQL Server 2005, è possibile utilizzare tipi definiti dall'utente per estendere il sistema di tipo scalare del server, consentendo l'archiviazione di oggetti CLR in un database di SQL Server. I tipi definiti dall'utente possono contenere più elementi e assumere vari comportamenti. Questo li differenzia dai tipi di dati alias tradizionali costituiti da un singolo tipo di dati di sistema di SQL Server.
Poiché il sistema accede ai tipi definiti dall'utente nella loro interezza, l'utilizzo che ne viene fatto per i tipi di dati complessi può influire negativamente sulle prestazioni. Il modo migliore per modellare i dati complessi in genere consiste nell'utilizzare righe e tabelle tradizionali. I tipi definiiti dall'utente in SQL Server risultano particolarmente adatti per:
Data, ora, valuta e tipi numerici estesi
Applicazioni Geospatial
Dati codificati o crittografati
Il processo di sviluppo dei tipi definiti dall'utente in SQL Server è costituito dai passaggi seguenti:
Codifica e compilazione dell'assembly che definisce il tipo definito dall'utente. I tipi definiti dall'utente vengono definiti utilizzando uno dei linguaggi supportati da Common Language Runtime (CLR) di .NET Framework che producono codice verificabile, tra cui, ad esempio, Microsoft Visual C# e Visual Basic .NET. I dati vengono esposti come campi e proprietà di una classe o una struttura .NET Framework mentre i comportamenti vengono definiti dai metodi della classe o della struttura.
Registrazione dell'assembly. I tipi definiti dall'utente possono essere distribuiti attraverso l'interfaccia utente di Visual Studio in un progetto di database o mediante l'istruzione Transact-SQL CREATE ASSEMBLY, che copia l'assembly contenente la classe o la struttura in un database.
Creazione del tipo definito dall'utente in SQL Server. Dopo aver caricato un assembly in un database host, viene utilizzata l'istruzione Transact-SQL CREATE TYPE per creare un tipo definito dall'utente e vengono esposti i membri della classe o della struttura come membri del tipo in questione. I tipi definiti dall'utente esistono solo nel contesto di un singolo database e dopo la registrazione non hanno dipendenze sui file esterni da cui sono stati creati.
Nota
Prima di SQL Server 2005, i tipi definiti dall'utente creati dagli assembly di .NET Framework non erano supportati. È tuttavia possibile utilizzare comunque i tipi di dati alias di SQL Server in SQL Server 2005 e versioni successive mediante sp_addtype. La sintassi CREATE TYPE può essere utilizzata per creare tipi di dati definiti dall'utente di SQL Server nativi e tipi definiti dall'utente.
**Creazione di tabelle, variabili o parametri mediante il tipo definito dall'utente **A partire da SQL Server 2005, un tipo definito dall'utente può essere utilizzato come definizione di colonna di una tabella, come variabile in un batch di Transact-SQL o come argomento di una stored procedure o funzione di Transact-SQL. Per ulteriori informazioni, vedere Utilizzo di tipi CLR definiti dall'utente.
Contenuto della sezione
Creazione di un tipo definito dall'utente
Viene illustrato come creare tipi definiti dall'utente.Registrazione dei tipi definiti dall'utente in SQL Server
Viene illustrato come registrare e gestire i tipi definiti dall'utente in SQL Server.Utilizzo dei tipi definiti dall'utente in SQL Server
Viene descritto come creare query mediante i tipi definiti dall'utente.Accesso ai tipi definiti dall'utente in ADO .NET
Viene illustrato come utilizzare i tipi definiti dall'utente mediante il provider di dati .NET Framework per SQL Server in ADO.NET.