Está semana me perguntaram se teria como chamar um WEB Service pelo SQL Server, nunca havia feito, porém, já havia visto que era possível, aproveitei a pergunta, para realizar a chamada de um WEB Service via SQL Server e colocar em pratica o que já havia lido sobre o assunto.
[sourcecode language=”sql”]
SP_CONFIGURE ‘SHOW ADVANCED OPTIONS’, 1
GO
RECONFIGURE;
GO
SP_CONFIGURE ‘OLE AUTOMATION PROCEDURES’, 1
GO
RECONFIGURE;
GO
[/sourcecode]
Agora vamos a procedure que chama o WEB Service, ela é bem simples e foi baseada no exemplo do CODE PROJECT.
Foi utilizado um WEB Service que não fosse necessário autenticação com usuário e senha, o WEB Service via cep, onde é enviado um CEP e é retornado algumas informações referente a esse CEP.
[sourcecode language=”sql”]
CREATE PROCEDURE P_CALLWS @V_PARAM VARCHAR(20) = NULL
AS
DECLARE @V_OBJ INT;
DECLARE @V_URL VARCHAR(200);
DECLARE @V_RESPONSE VARCHAR(8000);
SET @V_URL = ‘https://viacep.com.br/ws/’ + @V_PARAM + ‘/json/’
EXEC SP_OACREATE ‘MSXML2.ServerXMLHttp’, @V_OBJ out
EXEC SP_OAMETHOD @V_OBJ, ‘OPEN’, NULL, ‘GET’, @V_URL, FALSE
EXEC SP_OAMETHOD @V_OBJ, ‘SEND’
exec SP_OAGETPROPERTY @V_OBJ, ‘responseText’, @V_RESPONSE out
SELECT @V_RESPONSE RESULT
EXEC SP_OADESTROY @V_OBJ
RETURN
[/sourcecode]
Feito isso, vamos executar a procedure para vermos o retorno do WEB Service.
[sourcecode language=”sql”]
EXEC P_CALLWS ‘17501441’
[/sourcecode]
O resultado deve ser igual a imagem abaixo caso tenha passado o mesmo CEP como parâmetro.
Prezados, bom dia,
Por qual motivo se repete a execução da SP_CONFIGURE ‘SHOW ADVANCED OPTIONS’, 1 ?
Obrigado.
Estava errado mesmo, já fiz a correção, obrigado.
Prezado, bom dia,
Fiz o procedimento em dois locais e obtive resultados diferentes, ambos na versão 2014:
1) numa instalação local, no meu notebook, funcionou tudo certo, o retorno veio com o resultado esperado.
2) numa instalação em um servidor, onde está instalado o SQL 2014 também, o resultado retornado é NULL. Mas, executando neste mesmo servidor o webservice, via Browser, tudo ocorre corretamente.
Sabem o que pode estar ocorrendo? Ou como posso ver o que está ocorrendo? via LOG, etc?
Obrigado.
Boa tarde tudo bem?
Caso queira me envie por e-mail o código que está utilizando para que possa analisar.
ruberlei@gmail.com
No aguardo,
Ruberlei.
Ruberlei, boa tarde,
Primeiramente, obrigado sempre pela pronta resposta.
Na verdade, eu consegui corrigir o problema, fiz uma correção na URL do webservice e deu tudo certo.
Porém agora, preciso incrementar esse código da Procedure.
Primeiramente, preciso executar um webservice que vai popular uma tabela X no meu banco, e após isso, preciso executar um SELECT simples nesta tabela X que foi populada.
Gostaria de saber o procedimento correto para isso, visto que para fazer o SELECT preciso garantir que o processo executado pelo webservice tenha terminado.
Obrigado mais uma vez!
sabe se ainda funciona
Faz tempo que fiz, faz o teste se não funcionar me avisa, que refaço e te mando um exemplo funcionando!!!