WebRequest в MS SQL Server
Для того что бы отправлять/загружать данные по сети из MS SQL Server, можно написать две небольшие CLR функцию.
Для HTTP методов POST и GET.
Собираем сборку и копируем к примеру в C:\clr\SqlWebRequest.dll
Дальше настраиваем MSQL Server и подключаем функции.
Включаем интеграцию со средой CLR
Если в сборки есть код который работает вне контекста MS Sql Server, то необходимо явно указать что БД "надежна"
Так же возможно понадобится изменить владельца
Регистрируем сборку в БД
И создаем sql функции
Теперь можно использовать.
Получаем данные, это может быть один из сервисов внутри системы или сторонний api(отправка смс при восстановление пароля, актуализация курсов валют и много другое)
Так же можно отправлять данные, это может быть опять же внутренний сервис(очередь и пр) или как пример отправка сообщения в одну из комнат в Slack, с ошибками или оповещении о различных событиях
Для 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 );
Комментарии
Отправить комментарий