Создание функций CLR

В экземпляре SQL Server можно создать объект базы данных, который запрограммирован в сборке, созданной в среде CLR платформы Microsoft .NET Framework. К объектам базы данных, способным обогатить возможности применения многофункциональной модели программирования среды CLR, относятся агрегатные функции, функции, хранимые процедуры, триггеры и типы.

Чтобы создать функцию CLR в SQL Server, необходимо выполнить следующие шаги:

  • Определить функцию как статический метод класса на языке, поддерживаемом .NET Framework. Дополнительные сведения о программировании функций в среде CLR см. в разделе Определяемые пользователем функции среды CLR. После этого следует скомпилировать класс для создания сборки в платформе .NET Framework, с помощью компилятора соответствующего языка.

  • Зарегистрируйте эту сборку в SQL Server с помощью инструкции CREATE ASSEMBLY. Дополнительные сведения о сборках в SQL Server см. в разделе Сборки (компонент Database Engine).

  • Создать функцию, ссылающуюся на зарегистрированную сборку, с помощью инструкции CREATE FUNCTION.

ПримечаниеПримечание

Развертывание проекта SQL Server в Microsoft Visual Studio регистрирует сборку в базе данных, указанную для проекта. Кроме того, в базе данных создаются функции CLR для всех методов, сопровождаемых атрибутом SqlFunction. Дополнительные сведения см. в разделе Развертывание объектов базы данных CLR.

ПримечаниеПримечание

Возможность SQL Server выполнять код CLR по умолчанию отключена. Можно создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но эти ссылки не будут выполнены в SQL Server, пока не будет включен параметр clr enabled с помощью процедуры sp_configure (Transact-SQL).

Доступ к внешним ресурсам

Функции CLR могут использоваться для доступа к внешним ресурсам, например файлам, сетевым ресурсам, веб-службам, другим базам данных (в том числе и удаленным экземплярам SQL Server). Этого можно достичь, используя различные классы .NET Framework, например System.IO, System.WebServices, System.Sql и другие. Сборка, содержащая такие функции, должна иметь как минимум разрешения EXTERNAL_ACCESS, чтобы иметь доступ к внешним ресурсам. Дополнительные сведения см. в разделе CREATE ASSEMBLY (Transact-SQL). Для доступа к удаленным экземплярам SQL Server можно использовать управляемый поставщик клиента SQL (SQL Client Managed Provider). Однако замыкание соединений на сервер-источник в функциях CLR не поддерживается.

Создание, изменение и удаление сборок в SQL Server

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

Доступ к машинному коду

Функции CLR можно использовать для доступа к собственному (неуправляемому) коду, например написанному на C или C++, посредством использования средства PInvoke из управляемого кода (подробнее см. в разделе Вызов собственных функций из управляемого кода). Это даст возможность повторно использовать устаревший код в виде определяемых пользователем функций CLR или писать критичные к производительности функции в собственном коде. Для этого потребуется использование сборки UNSAFE. Предупреждения, касающиеся использования сборок UNSAFE, см. в разделе Управление доступом для кода на основе интеграции со средой CLR.