Sök…


Aktivera CLR i databasen

CLR-procedurer är inte aktiverade som standard. Du måste köra följande frågor för att aktivera CLR:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

Om någon CLR-modul behöver extern åtkomst bör du dessutom ställa in TRUSTWORTHY-egenskapen till ON i din databas:

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

Lägger till .dll som innehåller Sql CLR-moduler

Förfaranden, funktioner, triggers och typer skrivna på. Net-språk lagras i .dll-filer. När du skapar .dll-fil som innehåller CLR-procedurer bör du importera den till SQL Server:

CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS

PERMISSION_SET är som standard säkert, vilket innebär att koden i .dll inte behöver tillåtelse för att få åtkomst till externa resurser (t.ex. filer, webbplatser, andra servrar) och att den inte kommer att använda inbyggd kod som kan komma åt minnet.

PERMISSION_SET = EXTERNAL_ACCESS används för att markera enheter som innehåller kod som kommer åt externa resurser.

du kan hitta information om aktuella CLR-monteringsfiler i sys.assemblies-vyn:

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

Skapa CLR-funktion i SQL Server

Om du har skapat .Net-funktionen, sammanställt den till .dll och importerat den till SQL-servern som en enhet kan du skapa användardefinierad funktion som refererar till funktionen i den enheten:

CREATE FUNCTION dbo.TextCompress(@input nvarchar(max)) 
RETURNS varbinary(max) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress 

Du måste ange namnet på funktionen och signaturen med inmatningsparametrar och returvärden som matchar .Net-funktionen. I AS EXTERNAL NAME-klausulen måste du ange församlingsnamn, namnutrymme / klassnamn där den här funktionen är placerad och namnet på metoden i klassen som innehåller koden som kommer att exponeras som funktion.

Du kan hitta information om CLR-funktionerna med följande fråga:

SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'

Skapa CLR Användardefinierad typ i SQL Server

Om du har skapat .Net-klass som representerar någon användardefinierad typ, sammanställt den till .dll och importerat den till SQL-server som en enhet kan du skapa användardefinierad funktion som refererar till denna klass:

CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]

Du måste ange namnet på den typ som ska användas i T-SQL-frågor. I klausulen EXTERNAL NAME måste du ange församlingsnamn, namnutrymme och klassnamn.

Skapa CLR-procedur i SQL Server

Om du har skapat .Net-metod i någon klass, sammanställt den till .dll och importerat den till SQL-server som en enhet kan du skapa användardefinierad lagrad procedur som refererar till metod i den enheten:

CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max)) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething

Du måste ange procedurens namn och signatur med inmatningsparametrar som matchar .Net-metoden. I AS EXTERNAL NAME-klausulen måste du ange monteringsnamn, namnutrymme / klassnamn där den här proceduren är placerad och namnet på metoden i klassen som innehåller koden som kommer att exponeras som procedur.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow