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

Область применения: SQL Server 2016 (13.x) и более поздних версий

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

Создание функции CLR в SQL Server включает следующие действия.

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

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

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

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

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

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

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

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

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

Доступ к собственному коду

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

См. также