Creare funzioni CLRCreate CLR Functions

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

È possibile creare un oggetto di database all'interno di un'istanza di SQL ServerSQL Server programmata in un assembly creato in MicrosoftMicrosoft .NET Framework.NET Framework Common Language Runtime (CLR).You can create a database object inside an instance of SQL ServerSQL Server that is programmed in an assembly created in the MicrosoftMicrosoft .NET Framework.NET Framework common language runtime (CLR). Gli oggetti di database in grado di sfruttare il ricco modello di programmazione fornito da CLR includono funzioni di aggregazione, funzioni, stored procedure, trigger e tipi.Database objects that can leverage the rich programming model provided by the common language runtime include aggregate functions, functions, stored procedures, triggers, and types.

La creazione di una funzione CLR in SQL ServerSQL Server prevede i seguenti passaggi:Creating a CLR function in SQL ServerSQL Server involves the following steps:

  • Definire la funzione come metodo Static di una classe in un linguaggio supportato da .NET Framework.NET Framework.Define the function as a static method of a class in a language supported by the .NET Framework.NET Framework. Per altre informazioni sulla programmazione di funzioni in CLR, vedere Funzioni CLR definite dall'utente.For more information about how to program functions in the common language runtime, see CLR User-Defined Functions. Quindi, compilare la classe per compilare un assembly in .NET Framework.NET Framework utilizzando il compilatore per il linguaggio appropriato.Then, compile the class to build an assembly in the .NET Framework.NET Framework by using the appropriate language compiler.

  • Registrare l'assembly in SQL ServerSQL Server utilizzando l'istruzione CREATE ASSEMBLY.Register the assembly in SQL ServerSQL Server by using the CREATE ASSEMBLY statement. Per altre informazioni sugli assembly in SQL ServerSQL Server, vedere Assembly (Motore di database).For more information about assemblies in SQL ServerSQL Server, see Assemblies (Database Engine).

  • Creare la funzione che fa riferimento all'assembly registrato usando l'istruzione CREATE FUNCTION .Create the function that references the registered assembly by using the CREATE FUNCTION statement.

Nota

Con la distribuzione di un progetto SQL Server in MicrosoftMicrosoft Visual StudioVisual Studio viene registrato un assembly nel database specificato per il progetto.Deploying a SQL Server Project in MicrosoftMicrosoft Visual StudioVisual Studio registers an assembly in the database that was specified for the project. La distribuzione del progetto consente anche di creare funzioni CLR nel database per tutti i metodi annotati con l'attributo SqlFunction .Deploying the project also creates CLR functions in the database for all methods annotated with the SqlFunction attribute. Per altre informazioni, vedere Distribuzione di oggetti di database CLR.For more information, see Deploying CLR Database Objects.

Nota

Per impostazione predefinita, l'esecuzione di codice CLR in SQL ServerSQL Server è disattivata.The ability of SQL ServerSQL Server to execute CLR code is off by default. È possibile creare, modificare ed eliminare oggetti di database che fanno riferimento a moduli di codice gestito, ma tali riferimenti non verranno eseguiti in SQL ServerSQL Server a meno che non si abiliti l'opzione clr enabled usando sp_configure (Transact-SQL).You can create, alter, and drop database objects that reference managed code modules, but these references will not execute in SQL ServerSQL Server unless the clr enabled Option is enabled by using sp_configure (Transact-SQL).

Accesso a risorse esterneAccessing External Resources

Le funzioni CLR possono essere utilizzate per accedere a risorse esterne, ad esempio file, risorse di rete, servizi Web o altri database, comprese istanze remote di SQL ServerSQL Server.CLR functions can be used to access external resources such as files, network resources, Web Services, other databases (including remote instances of SQL ServerSQL Server). A questo scopo è possibile utilizzare varie classi di .NET Framework.NET Framework, ad esempio System.IO, System.WebServices, System.Sqle così via.This can be achieved by using various classes in the .NET Framework.NET Framework, such as System.IO, System.WebServices, System.Sql, and so on. L'assembly che contiene tali funzioni deve essere configurato almeno con l'autorizzazione EXTERNAL_ACCESS impostata a questo scopo.The assembly that contains such functions should at least be configured with the EXTERNAL_ACCESS permission set for this purpose. Per altre informazioni, vedere CREATE ASSEMBLY (Transact-SQL).For more information, see CREATE ASSEMBLY (Transact-SQL). È possibile utilizzare il provider gestito SQL Client per accedere a istanze remote di SQL ServerSQL Server,The SQL Client Managed Provider can be used to access remote instances of SQL ServerSQL Server. tuttavia nelle funzioni CLR le connessioni loopback al server di origine non sono supportate.However, loopback connections to the originating server are not supported in CLR functions.

Per creare, modificare o eliminare assembly in SQL ServerTo create, modify, or drop assemblies in SQL Server

Accesso al codice nativoAccessing Native Code

Le funzioni CLR possono essere usate per accedere al codice nativo (non gestito), ad esempio codice scritto in C o C++, tramite l'uso di PInvoke da codice gestito. Per informazioni dettagliate, vedere Chiamata a funzioni native da codice gestito .CLR functions can be used to access native (unmanaged) code, such as code written in C or C++, via the use of PInvoke from managed code (see Calling Native Functions from Managed Code for details). In questo modo è possibile riutilizzare codice legacy, quali funzioni CLR definite dall'utente, o scrivere funzioni definite dall'utente critiche per le prestazioni in codice nativo.This can allow you to re-use legacy code as CLR UDFs, or write performance-critical UDFs in native code. Tale operazione richiede l'utilizzo di un assembly UNSAFE.This requires using an UNSAFE assembly. Vedere Sicurezza dall'accesso di codice dell'integrazione con CLR per le cautele da prendere per l'uso di assembly UNSAFE.See CLR Integration Code Access Security for cautions about use of UNSAFE assemblies.

Vedere ancheSee Also

Creare funzioni definite dall'utente (Motore di database) Create User-defined Functions (Database Engine)
Creazione di funzioni di aggregazione definite dall'utente Create User-defined Aggregates
Eseguire funzioni definite dall'utente Execute User-defined Functions
Visualizzare le funzioni definite dall'utente View User-defined Functions
Concetti relativi alla programmazione dell'integrazione con CLR (Common Language Runtime) Common Language Runtime (CLR) Integration Programming Concepts