Веб-сервис из SQL

Могу ли я вызвать удаленную веб-службу из хранимой процедуры и использовать возвращаемые значения?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
0
1 086
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Если вы используете SQL 2005/2008, вы можете сделать это из хранимой процедуры CLR, если у вас есть возможность установить и запустить их. Для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/ms190790.aspx

Компонент Service Broker может предоставить те функции, которые вам нужны.

Как сообщает AntiSanta, это возможно с использованием хранимой процедуры CLR. Реальный вопрос в том, можно ли вообще этого избежать. Вызов веб-службы из хранимой процедуры кажется перевернутым. В идеале у вас должен быть какой-то другой сервис / приложение / уровень, который вызывает как хранимую процедуру, так и веб-сервис. Возможно, сохраненная процедура возвращает значения параметров для веб-службы, и вы фиксируете свою локальную транзакцию после завершения вызова WS.

Это значительно упростит отладку, развертывание и поддержку в долгосрочной перспективе и разъединит прямую ссылку между хранимой процедурой и веб-службой.

Есть ли у вас другие рекомендации? У меня есть программа Access (adp Writen в VBA) с серверной частью sql. Я хотел бы вызвать веб-сервис из доступа, но не хочу использовать надстройку com. Я звоню в веб-службу на удаленном сервере (в головном офисе), которая дает мне номер заказа на покупку.

MartGriff 30.12.2008 17:12

В SQL Server 2000 и выше (если среда CLR не включена) вы можете использовать COM через хранимые процедуры (sp_OACreate, sp_OAMethod и т. д.), Если у вас есть существующая оболочка COM для вашей веб-службы.

Вот мой код, который работает.

exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT  
if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed',16,1) 
return end  
exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @UrlString, false  
if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end  
exec @hr = sp_OAMethod @obj, 'send'  
if @hr <0 begin set @msg = 'sp_OAMethod Send failed' goto eh end  
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT  
if @hr <0 begin set @msg = 'sp_OAMethod read status failed' goto eh end  
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +str(@status) goto eh end  
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT  
if @hr <0 begin set @msg = 'sp_OAMethod read response failed' goto eh end  
exec @hr = sp_OADestroy @obj  
select @response  

......

а:

exec @hr = sp_OADestroy @obj  
Raiserror(@msg, 16, 1)  
Return  

Другие вопросы по теме