Hola, chicos,
Buen día.
En esta publicación rápida, demostraré una vez más el uso de procedimientos de automatización OLE para consumir información en la Web y llevarla a nuestra base de datos SQL Server, para que podamos trabajar con esta información según necesitemos. Si desea utilizar la API de Bemean, que devuelve datos en formato JSON, vea más en la publicación SQL Server 2016 – Cómo consultar información de un CEP usando la API Bemean y la función JSON_VALUE
En esta ocasión te mostraré cómo consultar información de ciudad, estado, barrio, complemento y código IBGE a partir de un código postal ingresado.
Consultar datos del código postal
Para realizar esta operación utilizaré el gran servicio de la página. viacep.com.br para ver información del código postal.
Filtraré el código postal ingresado para que solo contenga números. Después de eso, realizamos una solicitud GET a la URL de viacep y luego procesamos la devolución a través de 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
Después de crear la función, usémosla para probar el resultado:

¡Eso es todo!
¡Gracias y hasta la próxima!
Comentários (0)
Carregando comentários…