Microsoft SQL Server
Интеграция с обычным языком
Поиск…
Включение 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 вам нужно указать имя сборки, пространство имен / имя класса, в котором находится эта процедура, и имя метода в классе, который содержит код, который будет отображаться как процедура.