Skapa CLR-funktioner
gäller för: SQL Server 2016 (13.x) och senare versioner
Du kan skapa ett databasobjekt i en instans av SQL Server som är programmerad i en sammansättning som skapats i .NET Framework Common Language Runtime (CLR). Databasobjekt som kan använda den omfattande programmeringsmodellen som tillhandahålls av den gemensamma språkkörningen omfattar mängdfunktioner, funktioner, lagrade procedurer, utlösare och typer.
Att skapa en CLR-funktion i SQL Server innebär följande steg:
Definiera funktionen som en statisk metod för en klass på ett språk som stöds av .NET Framework. Mer information om hur du kan programmera funktioner med Common Language Runtime, se CLR-användardefinierade funktioner. Kompilera sedan klassen för att skapa en sammansättning i .NET Framework med hjälp av lämplig språkkompilator.
Registrera sammansättningen i SQL Server med hjälp av instruktionen
CREATE ASSEMBLY
. Mer information om sammansättningar i SQL Server finns i Sammansättningar (databasmotor).Skapa funktionen som refererar till den registrerade sammansättningen med hjälp av instruktionen CREATE FUNCTION.
Körning av CLR-kod är avstängd som standard i SQL Server. Du kan skapa, ändra och släppa databasobjekt som refererar till hanterade kodmoduler, men dessa referenser körs inte i SQL Server, såvida inte det clr-aktiverade serverkonfigurationsalternativet är aktiverat med hjälp av sp_configure.
När du distribuerar ett SQL Server-projekt i Visual Studio registreras en sammansättning i databasen som har angetts för projektet. När du distribuerar projektet skapas även CLR-funktioner i databasen för alla metoder som kommenterats med attributet SqlFunction
. Mer information finns i Distribuera CLR-databasobjekt.
Få åtkomst till externa resurser
Du kan använda CLR-funktioner för att komma åt externa resurser, till exempel filer, nätverksresurser, webbtjänster och andra databaser (inklusive fjärrinstanser av SQL Server). CLR-funktioner kan använda olika klasser i .NET Framework, till exempel System.IO
, System.WebServices
, System.Sql
och så vidare. Sammansättningen som innehåller sådana funktioner bör åtminstone konfigureras med behörighetsuppsättningen EXTERNAL_ACCESS
för detta ändamål. Mer information finns i CREATE ASSEMBLY.
SQL Client Managed Provider kan användas för att komma åt fjärrinstanser av SQL Server. Loopback-anslutningar till den ursprungliga servern stöds dock inte i CLR-funktioner.
Skapa, ändra eller släppa sammansättningar i SQL Server
Skapa en CLR-funktion
Åtkomst till inbyggd kod
CLR-funktioner kan komma åt intern (ohanterad) kod, till exempel kod skriven i C eller C++, via användning av PInvoke
från hanterad kod (se Anropa interna funktioner från Managed Code för mer information). Du kan återanvända äldre kod som CLR UDF:er eller skriva prestandakritiska UDF:er i intern kod och kräver att du använder en UNSAFE
sammansättning. Se CLR-integrering av Kodåtkomstsäkerhet för varningar om användning av UNSAFE
sammansättningar.