Szukaj…


Włącz CLR w bazie danych

Procedury CLR nie są domyślnie włączone. Musisz uruchomić następujące zapytania, aby włączyć CLR:

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

Ponadto, jeśli jakiś moduł CLR potrzebuje dostępu zewnętrznego, należy ustawić właściwość TRUSTWORTHY na ON w bazie danych:

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

Dodanie .dll, który zawiera moduły CLR Sql

Procedury, funkcje, wyzwalacze i typy napisane w językach .Net są przechowywane w plikach .dll. Po utworzeniu pliku .dll zawierającego procedury CLR należy go zaimportować do programu SQL Server:

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

PERMISSION_SET jest domyślnie bezpieczny, co oznacza, że kod w .dll nie potrzebuje pozwolenia na dostęp do zasobów zewnętrznych (np. Plików, stron internetowych, innych serwerów) i że nie będzie używał natywnego kodu, który może uzyskać dostęp do pamięci.

PERMISSION_SET = EXTERNAL_ACCESS służy do oznaczania zestawów zawierających kod, który będzie uzyskiwał dostęp do zasobów zewnętrznych.

informacje o aktualnych plikach zestawu CLR można znaleźć w widoku sys.assemblies:

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

Utwórz funkcję CLR w programie SQL Server

Jeśli utworzyłeś funkcję .Net, skompilowałeś ją w .dll i zaimportowałeś na serwer SQL jako zestaw, możesz utworzyć funkcję zdefiniowaną przez użytkownika, która odwołuje się do funkcji w tym zestawie:

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

Musisz podać nazwę funkcji i podpis z parametrami wejściowymi i zwracanymi wartościami, które pasują do funkcji .Net. W klauzuli AS EXTERNAL NAME należy podać nazwę zestawu, przestrzeń nazw / nazwę klasy, w której umieszczona jest ta funkcja, oraz nazwę metody w klasie zawierającej kod, który zostanie ujawniony jako funkcja.

Informacje o funkcjach CLR można znaleźć za pomocą następującego zapytania:

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

Utwórz typ CLR zdefiniowany przez użytkownika w SQL Server

Jeśli masz utworzoną klasę .Net reprezentującą jakiś typ zdefiniowany przez użytkownika, skompilowałeś ją do .dll i zaimportowałeś na serwer SQL jako zestaw, możesz utworzyć funkcję zdefiniowaną przez użytkownika, która odwołuje się do tej klasy:

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

Musisz podać nazwę typu, który będzie używany w zapytaniach T-SQL. W klauzuli NAZWA ZEWNĘTRZNA musisz podać nazwę zestawu, przestrzeń nazw i nazwę klasy.

Utwórz procedurę CLR w SQL Server

Jeśli utworzyłeś metodę .Net w jakiejś klasie, skompilowałeś ją w .dll i zaimportowałeś do SQL Server jako zestaw, możesz utworzyć zdefiniowaną przez użytkownika procedurę składowaną, która odwołuje się do metody w tym zestawie:

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

Musisz podać nazwę procedury i podpis za pomocą parametrów wejściowych pasujących do metody .Net. W klauzuli AS EXTERNAL NAME należy podać nazwę zestawu, przestrzeń nazw / nazwę klasy, w której umieszczona jest ta procedura, oraz nazwę metody w klasie zawierającej kod, który zostanie ujawniony jako procedura.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow