Tipi definiti dall'utente CLR

Si applica a: sìSQL Server (tutte le versioni supportate)

SQL Serverconsente di creare oggetti di database programmati in base a un assembly creato nel .NET Framework Common Language Runtime (CLR). 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. CLR può essere abilitato usando l'sp_configure di sistema stored procedure.

A partire da , è possibile usare tipi definiti dall'utente (UDT) per estendere il sistema di tipi scalari del server, abilitando l'archiviazione di SQL Server 2005 (9.x) oggetti CLR in un SQL Server database. 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 definiti 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:

  1. 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 CLR (Common Language Runtime) di .NET Framework che generano 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.

  2. Registrare l'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.

  3. 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 (9.x), i tipi definiti dall'utente creati dagli assembly di .NET Framework non erano supportati. Tuttavia, è comunque possibile usare i SQL Server tipi di dati alias usando 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.

  4. Creare tabelle, variabili o parametri usando il tipo definito dall'utente A partire da , un tipo definito dall'utente può essere usato come definizione di colonna di una tabella, come variabile in un batch o come argomento di una funzione o SQL Server 2005 (9.x) Transact-SQL di un Transact-SQL stored procedure.

Contenuto della sezione

Creazione di un User-Defined dati
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 (UDT) in SQL Server.

Uso di 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.