Delen via


CLR-functies maken

Van toepassing op: SQL Server 2016 (13.x) en latere versies

U kunt een databaseobject maken in een exemplaar van SQL Server dat is geprogrammeerd in een assembly die is gemaakt in de .NET Framework Common Language Runtime (CLR). Databaseobjecten die gebruikmaken van het uitgebreide programmeermodel dat wordt geleverd door de algemene taalruntime, omvatten statistische functies, functies, opgeslagen procedures, triggers en typen.

Het maken van een CLR-functie in SQL Server omvat de volgende stappen:

  • Definieer de functie als een statische methode van een klasse in een taal die wordt ondersteund door .NET Framework. Zie door de gebruiker gedefinieerde CLR-functiesvoor meer informatie over het programmeren van functies in de algemene taalruntime. Compileer vervolgens de klasse om een assembly te bouwen in .NET Framework met behulp van de juiste taalcompilator.

  • Registreer de assembly in SQL Server met behulp van de CREATE ASSEMBLY-instructie. Zie Assembly's (Database Engine)voor meer informatie over assembly's in SQL Server.

  • Maak de functie die verwijst naar de geregistreerde assembly met behulp van de instructie CREATE FUNCTION.

Het uitvoeren van CLR-code is standaard uitgeschakeld in SQL Server. U kunt databaseobjecten maken, wijzigen en verwijderen die verwijzen naar beheerde codemodules, maar deze verwijzingen worden niet uitgevoerd in SQL Server, tenzij de clr ingeschakeld serverconfiguratieoptie is ingeschakeld met behulp van sp_configure.

Als u een SQL Server-project implementeert in Visual Studio, wordt een assembly geregistreerd in de database die voor het project is opgegeven. Als u het project implementeert, worden ook CLR-functies in de database gemaakt voor alle methoden die zijn geannoteerd met het kenmerk SqlFunction. Zie CLR-databaseobjecten implementerenvoor meer informatie.

Toegang tot externe bronnen

U kunt CLR-functies gebruiken voor toegang tot externe resources, zoals bestanden, netwerkbronnen, webservices en andere databases (inclusief externe exemplaren van SQL Server). CLR-functies kunnen verschillende klassen gebruiken in .NET Framework, zoals System.IO, System.WebServices, System.Sqlenzovoort. De assembly die dergelijke functies bevat, moet ten minste worden geconfigureerd met de EXTERNAL_ACCESS machtigingenset voor dit doel. Zie CREATE ASSEMBLY-voor meer informatie.

De beheerde SQL-clientprovider kan worden gebruikt voor toegang tot externe exemplaren van SQL Server. Loopback-verbindingen met de oorspronkelijke server worden echter niet ondersteund in CLR-functies.

Assembly's maken, wijzigen of verwijderen in SQL Server

Een CLR-functie maken

Toegang tot systeemeigen code

CLR-functies hebben toegang tot systeemeigen (niet-beheerde) code, zoals code die is geschreven in C of C++, via het gebruik van PInvoke uit beheerde code (zie Systeemeigen functies aanroepen vanuit beheerde code voor meer informatie). U kunt verouderde code hergebruiken als CLR UDF's of UDF's schrijven die essentieel zijn voor prestaties in systeemeigen code. Hiervoor moet u een UNSAFE assembly gebruiken. Zie CLR Integration Code Access Security voor waarschuwingen over het gebruik van UNSAFE assemblies.