Поиск…


Включение CLR в базе данных

По умолчанию CLR-процедуры не включены. Для включения CLR необходимо выполнить следующие запросы:

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

Кроме того, если какой-либо модуль CLR нуждается в внешнем доступе, вы должны установить для свойства TRUSTWORTHY значение ON в своей базе данных:

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

Добавление .dll, содержащего модули Sql CLR

Процедуры, функции, триггеры и типы, написанные на .Net-языках, хранятся в файлах DLL. Создав файл DLL, содержащий процедуры CLR, вы должны импортировать его в SQL Server:

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

PERMISSION_SET является безопасным по умолчанию, что означает, что для кода в .dll не требуется разрешение для доступа к внешним ресурсам (например, файлы, веб-сайты и другие серверы) и что он не будет использовать собственный код, который может получить доступ к памяти.

PERMISSION_SET = EXTERNAL_ACCESS используется для обозначения сборок, содержащих код, который будет обращаться к внешним ресурсам.

вы можете найти информацию о текущих файлах сборки CLR в представлении sys.assemblies:

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

Создание функции CLR в SQL Server

Если вы создали функцию .Net, скомпилировали ее в DLL и импортировали на сервер SQL в качестве сборки, вы можете создать определенную пользователем функцию, которая ссылается на эту функцию:

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

Вам нужно указать имя функции и подпись с входными параметрами и вернуть значения, соответствующие функции .Net. В предложении AS EXTERNAL NAME вам нужно указать имя сборки, пространство имен / имя класса, в котором находится эта функция, и имя метода в классе, который содержит код, который будет отображаться как функция.

Вы можете найти информацию о функциях CLR, используя следующий запрос:

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

Создать CLR Пользовательский тип в SQL Server

Если вы создали класс .Net, который представляет определенный пользовательский тип, скомпилировал его в .dll и импортировал на сервер SQL в качестве сборки, вы можете создать пользовательскую функцию, которая ссылается на этот класс:

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

Вам нужно указать имя типа, который будет использоваться в запросах T-SQL. В разделе EXTERNAL NAME вам нужно указать имя сборки, пространство имен и имя класса.

Создание процедуры CLR в SQL Server

Если вы создали метод .NET в каком-то классе, скомпилировали его в .dll и импортировали на сервер SQL в качестве сборки, вы можете создать пользовательскую хранимую процедуру, ссылающуюся на метод в этой сборке:

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

Вам нужно указать имя процедуры и подписи с входными параметрами, которые соответствуют методу .Net. В предложении AS EXTERNAL NAME вам нужно указать имя сборки, пространство имен / имя класса, в котором находится эта процедура, и имя метода в классе, который содержит код, который будет отображаться как процедура.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow