Olá pessoal,
Bom dia.
Neste post rápido, vou demonstrar mais uma vez o uso de procedures OLE Automation para consumir informações na Web e trazer para o nosso banco SQL Server, de forma que possamos trabalhar com essa informação conforme nossa necessidade. Caso você queira utilizar a API do Bemean, que retorna os dados no formato JSON, veja mais no post SQL Server 2016 – Como consultar informações de um CEP utilizando a API Bemean e a função JSON_VALUE
Desta vez, vou mostrar como consultar as informações de cidade, estado, bairro, complemento e código IBGE a partir de um cep informado.
Consultando os dados do CEP
Para realizar essa operação, vou utilizar o ótimo serviço da página viacep.com.br para consultar as informações de CEP.
Vou filtrar o CEP de input, para que o mesmo contenha apenas números. Após isso, fazemos fazer uma requisição GET na URL do viacep e depois tratamos o retorno via XQuery.
CREATE PROCEDURE dbo.stpConsulta_CEP (
@Nr_CEP VARCHAR(20)
)
AS BEGIN
DECLARE
@obj INT,
@Url VARCHAR(255),
@resposta VARCHAR(8000),
@xml XML
-- Recupera apenas os números do CEP
DECLARE @startingIndex INT = 0
WHILE (1=1)
BEGIN
SET @startingIndex = PATINDEX('%[^0-9]%', @Nr_CEP)
IF (@startingIndex <> 0)
SET @Nr_CEP = REPLACE(@Nr_CEP, SUBSTRING(@Nr_CEP, @startingIndex, 1), '')
ELSE
BREAK
END
SET @Url = 'http://viacep.com.br/ws/' + @Nr_CEP + '/xml'
EXEC sys.sp_OACreate 'MSXML2.ServerXMLHTTP', @obj OUT
EXEC sys.sp_OAMethod @obj, 'open', NULL, 'GET', @Url, FALSE
EXEC sys.sp_OAMethod @obj, 'send'
EXEC sys.sp_OAGetProperty @obj, 'responseText', @resposta OUT
EXEC sys.sp_OADestroy @obj
SET @xml = @resposta COLLATE SQL_Latin1_General_CP1251_CS_AS
SELECT
@xml.value('(/xmlcep/cep)[1]', 'varchar(9)') AS CEP,
@xml.value('(/xmlcep/logradouro)[1]', 'varchar(200)') AS Logradouro,
@xml.value('(/xmlcep/complemento)[1]', 'varchar(200)') AS Complemento,
@xml.value('(/xmlcep/bairro)[1]', 'varchar(200)') AS Bairro,
@xml.value('(/xmlcep/localidade)[1]', 'varchar(200)') AS Cidade,
@xml.value('(/xmlcep/uf)[1]', 'varchar(200)') AS UF,
@xml.value('(/xmlcep/ibge)[1]', 'varchar(200)') AS IBGE
END
Após criamos a função, vamos utilizá-la para testar o resultado:

É isso aí!
Obrigado e até a próxima!
Comentários (0)
Carregando comentários…