Расширение возможностей баз данных Microsoft SQL Server c помощью функций определяемых пользователем. Часть 1. Создание SQLCLR сборки

Язык Transact-SQL (T-SQL) Microsoft SQL Server (MS SQL) обладает довольно широкими возможностями не только в плане построения запросов, но и разработки серверной бизнес логики (back-end). Но, тем не менее, эти возможности далеко не безграничны.

Существует 2 основных подхода к решению задач не подвластных T-SQL.

  • Реализация необходимого функционала в рамках клиентского приложения либо сервера приложения (при трёхзвенной архитектуре);
  • Использование внутри базы данных (БД) программного кода .NET. Конкретно, технологии SQLCLR.

Последний подход позволяет, в частности, перенести часть логики с клиента или сервера приложения в БД тем самым освободив их от выполнения ряда задач, которые не имеют прямого отношения к их работе.

С помощью технологии SQLCLR можно «научить» БД выполнять сложные алгоритмы по обработке данных. Если учесть, то, что в SQLCLR доступен практически весь арсенал средств .NET (за исключением разве что визуального интерфейса), то, в случае необходимости, можно разработать БД, которая полностью реализует всю бизнес-логику. Клиентской программе остаётся только запрашивать и отображать полученные данные либо отправлять в БД новые для обработки.

Для того чтобы проиллюстрировать использование технологии SQLCLR воспользуемся простым, но, в тоже время, весьма показательным примером. Реализуем вычисление МD5 для строки непосредственно в БД. Эту задачу нельзя решить штатными средствами T-SQL, но с помощью SQLCLR это становится возможным.

Вначале создадим в Visual Studio, так называемый, «Проект базы данных SQL Server».

Создадим функцию, которая будет вычислять MD5 для строки.

Создание шаблона функции

Шаблон функции с подключением необходимых сборок Visual Studio создаст автоматически. Остаётся только его отредактировать и написать нужный код. Напомним, что, для вычисления MD5, необходимо дополнительно подключить следующие сборки: System.Security.Cryptography и System.Text. В данном примере функция названа просто Md5, и она принимает только 1 параметр в виде строки, для которой вычисляется хэш-сумма.

Атрибут [Microsoft.SqlServer.Server.SqlFunction] означает, что эта функция предназначена для использования в БД MS SQL. Класс UserDefinedFunctions отвечает за функции SQLCLR определённые пользователем/

После этого остаётся только скомпилировать сборку, и она будет полностью готова к использованию в БД.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *