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

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

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

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

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

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

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

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

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

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

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

Управляемый поставщик клиента SQL можно использовать для доступа к удаленным экземплярам SQL Server. Однако в функциях CLR не поддерживаются loopback-подключения к исходному серверу.

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

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

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

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