Microsoft SQL Server
Integracja środowiska wykonawczego Common Language
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.