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:

Busca CEP
Busca CEP

É isso aí!
Obrigado e até a próxima!