WebRequest в MS SQL Server

Для того что бы отправлять/загружать данные по сети из MS SQL Server, можно написать две небольшие CLR функцию.
Для HTTP методов POST и GET.



Собираем сборку и копируем к примеру в C:\clr\SqlWebRequest.dll

Дальше настраиваем MSQL Server и подключаем функции.

Включаем интеграцию со средой CLR
sp_configure 'clr enabled', 1;

RECONFIGURE;

Если в сборки есть код который работает вне контекста MS Sql Server, то необходимо явно указать что БД "надежна"
ALTER DATABASE myDB SET TRUSTWORTHY ON;

Так же возможно понадобится изменить владельца
EXEC sp_changedbowner 'sa'

Регистрируем сборку в БД
CREATE ASSEMBLY SqlWebRequest
FROM 'C:\clr\SqlWebRequest.dll'
WITH PERMISSION_SET=UNSAFE;

И создаем sql функции
CREATE FUNCTION dbo.WebrequestGET(
     @uri        nvarchar(max),
     @user       nvarchar(255)=NULL,
     @passwd     nvarchar(255)=NULL
)
RETURNS nvarchar(max)
AS
EXTERNAL NAME SqlWebRequest.Functions.GET;

GO

CREATE FUNCTION dbo.WebrequestPOST(
     @uri         nvarchar(max),
     @postdata    nvarchar(max),
     @user        nvarchar(255)=NULL,
     @passwd      nvarchar(255)=NULL
)
RETURNS nvarchar(max)
AS

EXTERNAL NAME SqlWebRequest.Functions.POST;


Теперь можно использовать.

Получаем данные, это может быть один из сервисов внутри системы или сторонний api(отправка смс при восстановление пароля, актуализация курсов валют и много другое)
PRINT dbo.dbo.WebrequestGET(
'https://www.googleapis.com/blogger/v3/blogs/5488378056805848820',
 DEFAULT,
 DEFAULT
)

Так же можно отправлять данные, это может быть опять же внутренний сервис(очередь и пр) или как пример отправка сообщения в одну из комнат в Slack, с ошибками или оповещении о различных событиях
PRINT dbo.fn_post_webrequest(
   'https://hooks.slack.com/services/token/token/token',
   '{
   "text": "Error web api",
   "attachments": [
    {
     "title": "ID='+convert(nvarchar(50), @id)+'"
    }
   ]
  }',
   DEFAULT,
   DEFAULT
  );



Комментарии

Популярные сообщения из этого блога

Асинхронное выполнение процедур или триггера в MS SQL Server

Рекурсивные SQL запросы

Кратко про SQLAlchemy Core