В предыдущей статье была скомпилирована SQLCLR сборка, которая содержит функцию для вычисления MD5. Теперь необходимо интегрировать её в базу данных (БД).
Существует 2 способа интеграции:
- Автоматическая. Когда БД целиком создаётся в Visual Studio и по завершении разработки остаётся только выполнить развёртывание проекта;
- Ручной. Когда сборка создаётся отдельно (обычно для уже существующей БД) и её требуется интегрировать в БД для дальнейшего использования.
Рассмотрим 2й способ, так как он наиболее наглядный.
Для наглядной иллюстрации используем БД Md5, которая создана специально для этого примера, и сборку SQLCLR, созданную в предыдущей статье. В этой БД есть только 1 таблица MD5 с единственным полем Hash.
Вначале загрузим сборку в БД. Для этого необходимо выполнить следующий сценарий на Transact-SQL (T-SQL).
1 2 |
CREATE ASSEMBLY имя сборки FROM 'путь к сборкеl' GO |
В данном примере загружается сборка CLRMD5.dll созданная в предыдущей статье.
1 2 |
CREATE ASSEMBLY CLR_MD5 FROM 'C:\CLRMD5.dll' GO |
В SQL Server Management Studio для этого достаточно открыть в нужной БД ветку «Программирование» — «Сборки» и в контекстном меню выбрать команду «Создать сборку».
В открывшемся диалоговом окне необходимо указать путь сборке (можно прописать вручную или выбрать с помощью диалога открытия файла (кнопка «Обзор»)). После этого остаётся только нажать кнопку «Ok».
К сожалению, загрузка сборки это начальный и единственный этап, который можно выполнить, только нажимая на кнопки. Все остальные этапы требуют написания программного кода.
После того, как сборка загружена в БД, необходимо изменить настройки Microsoft SQL Server, чтобы разрешить выполнение .NET кода. Для этого необходимо выполнить следующий набор команд T-SQL.
1 2 3 4 5 6 7 8 |
p_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'clr enabled', 1; GO RECONFIGURE; GO |
1 2 3 4 |
sp_configure 'clr enabled', 1; GO RECONFIGURE; GO |
Теперь, когда код из сборки может выполняться, импортируем функцию, которая была создана в предыдущей статье.
1 2 3 4 5 |
CREATE FUNCTION [dbo].[getMd5](@str [nvarchar](max)) RETURNS [nvarchar](max) WITH EXECUTE AS CALLER AS EXTERNAL NAME [CLRMD5].[UserDefinedFunctions].[getMd5] GO |
Блок [CLRMD5].[UserDefinedFunctions].[getMd5] это полное имя импортируемой функции в сборке, включая класс.
После завершения всех вышеописанных можно использовать функцию в программном коде на T-SQL. Протестируем её. Добавим в таблицу Hash значение MD5 для слова Test.
1 2 |
INSERT INTO [Md5].[dbo].[MD5] ([Hash]) VALUES (dbo.getMd5('Test')); GO |
В результате, последующей выборки можно убедиться в корректности работы функции изSQLCLR сборки.
1 |
SELECT * FROM [Md5].[dbo].[MD5] |
При этом, важно особо подчеркнуть, что значение хэш-суммы было вычислено непосредственно в БД без использования каких-либо вспомогательных средств.
SQLCLR – это очень мощная и гибкая технология. В умелых руках с её помощью можно решать сложнейшие задачи, которые лежат далеко за пределами «обычной» работы с БД.
Добавить комментарий