Zoeken…


Schakel CLR in op database

CLR-procedures zijn standaard niet ingeschakeld. U moet de volgende query's uitvoeren om CLR in te schakelen:

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

Als een CLR-module externe toegang nodig heeft, moet u bovendien de eigenschap TRUSTWORTHY instellen op ON in uw database:

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

.Dll toevoegen die SQL CLR-modules bevat

Procedures, functies, triggers en typen die zijn geschreven in .Net-talen worden opgeslagen in DLL-bestanden. Nadat u een DLL-bestand met CLR-procedures hebt gemaakt, moet u dit in SQL Server importeren:

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

PERMISSION_SET is standaard veilig, wat betekent dat code in .dll geen toestemming nodig heeft voor toegang tot externe bronnen (bijv. Bestanden, websites, andere servers) en dat het geen native code gebruikt die toegang heeft tot het geheugen.

PERMISSION_SET = EXTERNAL_ACCESS wordt gebruikt om merken te markeren die code bevatten die toegang geeft tot externe bronnen.

u kunt informatie vinden over de huidige CLR-assemblagebestanden in de weergave sys.assemblies:

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

Maak CLR-functie in SQL Server

Als u de .Net-functie hebt gemaakt, deze in .dll hebt gecompileerd en als een assembly in SQL Server hebt geïmporteerd, kunt u een door de gebruiker gedefinieerde functie maken die verwijst naar de functie in die assembly:

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

U moet de naam van de functie en handtekening opgeven met invoerparameters en retourwaarden die overeenkomen met de .Net-functie. In de clausule AS EXTERNAL NAME moet u de merknaam, naamruimte / klassenaam opgeven waar deze functie wordt geplaatst en de naam van de methode in de klasse die de code bevat die als functie wordt weergegeven.

U kunt informatie over de CLR-functies vinden met behulp van de volgende query:

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

Maak CLR Door de gebruiker gedefinieerd type in SQL Server

Als u een .Net-klasse hebt gemaakt die een door de gebruiker gedefinieerd type vertegenwoordigt, deze in .dll heeft gecompileerd en als een assembly in SQL Server heeft geïmporteerd, kunt u een door de gebruiker gedefinieerde functie maken die naar deze klasse verwijst:

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

U moet de naam opgeven van het type dat wordt gebruikt in T-SQL-query's. In de clausule EXTERNAL NAME moet u de merknaam, naamruimte en klassenaam opgeven.

Maak de CLR-procedure in SQL Server

Als u de .Net-methode in een bepaalde klasse hebt gemaakt, deze in .dll hebt gecompileerd en als een assembly in SQL Server hebt geïmporteerd, kunt u een door de gebruiker gedefinieerde opgeslagen procedure maken die verwijst naar de methode in die assembly:

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

U moet de naam van de procedure en handtekening opgeven met invoerparameters die overeenkomen met de .Net-methode. In de clausule AS EXTERNAL NAME moet u de merknaam, naamruimte / klassenaam opgeven waar deze procedure wordt geplaatst en de naam van de methode in de klasse die de code bevat die als procedure wordt weergegeven.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow