Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
4| Name | Data Type | Length | Description |
|---|---|---|---|
| @domicilio1 | varchar | 500 | |
| @provincia | varchar | 100 | |
| @cuit | varchar | 20 | |
| @proceso | int | 4 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec [sp_comparo_domicilios_universo_] 'BOGADO PJE. 4529 PISO:5 DPTO:A', 'CIUDAD AUTONOMA DE BUENOS AIRES','20162461827',1
exec [sp_comparo_domicilios_universo_] '504 N 1769', 'BUENOS AIRES','20162461827',0
select p.nombre_persona, p.identificacion, d.* from domicilios_todos d
inner join padrones p on p.identificacion = d.cuit and p.habilitado = 1 and p.identificador in ('CUIT','CUIL')
where prv_nombre like 'CIUDAD%BUENOS AIRES' AND domicilio like '%BOGADO %4529%' and visible = 1 and cuit like '3%'
*/
CREATE OR ALTER PROCEDURE dbo.sp_comparo_domicilios_universo_
@domicilio1 varchar(500) = null,
@provincia varchar(100) = null,
@cuit varchar(20) = null,
@proceso int = 0 --> 1 va a devolver el registro completo de la empresa con ese domicilio
--> 0 devuelve el cuit y paremetros de busqueda, para que el SP que lo llama, lo haga
AS
BEGIN
SET NOCOUNT ON;
declare @cant1 smallint = 0
declare @palabras1 table (nro smallint, palabra varchar(100))
declare @pal varchar(100)
declare @i smallint, @j smallint
set @domicilio1 = REPLACE(@domicilio1,'¥','')
--- Paso 1: separo las palabras de los domicilios
while (@domicilio1 like '% %')
begin
set @domicilio1 = replace(@domicilio1,' ',' ')
end
set @i = len(@domicilio1)
-- domicilio 1
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
while (@j < @i and @j > 0)
begin
set @cant1 = @cant1 + 1
set @pal = (SELECT SUBSTRING(@domicilio1, 1, CHARINDEX(' ', @domicilio1) - 1))
insert into @palabras1 values (@cant1, @pal)
SET @domicilio1 = (select SUBSTRING(@domicilio1, CHARINDEX(' ', @domicilio1) +1, LEN(@domicilio1)))
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
end
set @cant1 = @cant1 + 1
set @pal = @domicilio1
insert into @palabras1 values (@cant1, @pal)
-- Busco la altura
declare @Numero_1 varchar(10) = null
set @i = 2
while (@i <= @cant1)
BEGIN
IF (@i = 2 AND (select palabra from @palabras1 where nro = 1) = 'CALLE')
BEGIN
set @i = @i + 1
CONTINUE
END
IF (@i = 3 AND (select palabra from @palabras1 where nro = 1) = 'CALLE'
AND (select palabra from @palabras1 where nro = 2) in ('N', 'NRO', 'NRO.','N*','Nº'))
BEGIN
set @i = @i + 1
CONTINUE
END
set @pal = (select palabra from @palabras1 where nro = @i)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @pal = replace(@pal,',','')
set @pal = replace(@pal,'-','')
set @pal = replace(@pal,'.','')
set @Numero_1 = convert(int,@pal)
update @palabras1 set palabra = null where nro = @i
break
END
set @i = @i + 1
END
/*
select * from @palabras1
select @Numero_1 as altura
return
*/
/*
PARA LOS CASOS DE CALLES QUE EL NOMBRE ES UN NRO.
*/
declare @Calle varchar(100) = null
IF ((select palabra from @palabras1 where nro = 1) = 'CALLE')
BEGIN
set @pal = (select palabra from @palabras1 where nro = 2)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @calle = @pal
END
else
BEGIN
if ((select palabra from @palabras1 where nro = 2) in ('N','NRO','NRO.','N*','Nº'))
begin
set @pal = (select palabra from @palabras1 where nro = 3)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @calle = @pal
END
end
END
END
set @pal = (select palabra from @palabras1 where nro = 1)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @calle = @pal
END
---
declare @longitud smallint = 0
declare @largas smallint = 0,
@Cortas smallint = 0
declare @pal1 varchar(100) = null,
@buscar varchar(100) = null
set @i = 1
set @j = 1
while (@i <= @cant1)
begin
set @pal1 = (select palabra from @palabras1 where nro = @i)
if (@pal1 != 'PISO' and @pal1 not like 'PISO:%' and @pal1 not like 'DPTO:%' and @pal1 not like 'DTO:%'
and @pal1 != 'CALLE' and @pal1 != 'AVENIDA' and @pal1 != 'AV' and @pal1 != 'AV.' and @pal1 != 'AVDA' and @pal1 != 'AVDA.'
and @pal1 != 'PASAJE' and @pal1 != 'PJE' and @pal1 != 'PJE.')
begin
if (LEN(@pal1) > @longitud and len(@pal1) > 3)
set @buscar = @pal1
end
set @i = @i + 1
end
/*
set @buscar = '%' + @buscar + ' %'
if (@buscar is not null and @Numero_1 is not null)
set @buscar = @buscar + cast(@Numero_1 as varchar) + '%'
*/
/*
if (@proceso = 1)
begin
select @buscar, @Numero_1 return
end
*/
if (@provincia like 'CIUDAD%BUENOS AIRES')
set @provincia = 'CIUDAD%BUENOS AIRES'
--select @buscar, @provincia return
declare @encontrados table (cuit varchar(20), nombre varchar(200))
declare @domicilios table (id int, domicilio varchar(200), pai_nombre varchar(20), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10), created datetime)
declare @resultados table (cuit varchar(20), nombre varchar(200), domicilio varchar(200), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10))
declare @cuit_encontrado varchar(20), @nombre_encontrado varchar(200)
insert into @encontrados
select p.identificacion, p.nombre_persona--, d.*
from domicilios_todos d
inner join padrones p on p.identificacion = d.cuit and p.habilitado = 1 and p.identificador in ('CUIT','CUIL')
where prv_nombre like + '%' + @provincia + '%'
and domicilio like + '%' + @buscar + ' %' + iif(@Numero_1 is not null,cast(@Numero_1 as varchar),'') + '%'
and visible = 1 and cuit like '3%'
if @proceso = 1
begin
DECLARE C_padron CURSOR FOR
select distinct cuit,nombre
from @encontrados
OPEN C_Padron
FETCH NEXT FROM C_Padron INTO @cuit_encontrado, @nombre_encontrado
WHILE @@fetch_status = 0
BEGIN
delete from @domicilios
insert into @domicilios exec sp_obtener_domicilios @cuit_encontrado
insert into @resultados
select @cuit_encontrado, @nombre_encontrado, d.domicilio, d.prv_nombre, d.loc_nombre, d.codpos, d.tipo_domicilio
from @domicilios d
where prv_nombre like + '%' + @provincia + '%'
and domicilio like + '%' + @buscar + ' %' + iif(@Numero_1 is not null,cast(@Numero_1 as varchar),'') + '%'
FETCH NEXT FROM C_Padron INTO @cuit_encontrado, @nombre_encontrado
END
CLOSE C_Padron
DEALLOCATE C_Padron
select * from @resultados
end
else
begin
select distinct cuit, nombre, @buscar as buscar, @Numero_1 as altura from @encontrados
end
END
GO
GO
/*
exec [sp_comparo_domicilios_universo_] 'BOGADO PJE. 4529 PISO:5 DPTO:A', 'CIUDAD AUTONOMA DE BUENOS AIRES','20162461827',1
exec [sp_comparo_domicilios_universo_] '504 N 1769', 'BUENOS AIRES','20162461827',0
select p.nombre_persona, p.identificacion, d.* from domicilios_todos d
inner join padrones p on p.identificacion = d.cuit and p.habilitado = 1 and p.identificador in ('CUIT','CUIL')
where prv_nombre like 'CIUDAD%BUENOS AIRES' AND domicilio like '%BOGADO %4529%' and visible = 1 and cuit like '3%'
*/
CREATE OR ALTER PROCEDURE dbo.sp_comparo_domicilios_universo_
@domicilio1 varchar(500) = null,
@provincia varchar(100) = null,
@cuit varchar(20) = null,
@proceso int = 0 --> 1 va a devolver el registro completo de la empresa con ese domicilio
--> 0 devuelve el cuit y paremetros de busqueda, para que el SP que lo llama, lo haga
AS
BEGIN
SET NOCOUNT ON;
declare @cant1 smallint = 0
declare @palabras1 table (nro smallint, palabra varchar(100))
declare @pal varchar(100)
declare @i smallint, @j smallint
set @domicilio1 = REPLACE(@domicilio1,'¥','')
--- Paso 1: separo las palabras de los domicilios
while (@domicilio1 like '% %')
begin
set @domicilio1 = replace(@domicilio1,' ',' ')
end
set @i = len(@domicilio1)
-- domicilio 1
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
while (@j < @i and @j > 0)
begin
set @cant1 = @cant1 + 1
set @pal = (SELECT SUBSTRING(@domicilio1, 1, CHARINDEX(' ', @domicilio1) - 1))
insert into @palabras1 values (@cant1, @pal)
SET @domicilio1 = (select SUBSTRING(@domicilio1, CHARINDEX(' ', @domicilio1) +1, LEN(@domicilio1)))
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
end
set @cant1 = @cant1 + 1
set @pal = @domicilio1
insert into @palabras1 values (@cant1, @pal)
-- Busco la altura
declare @Numero_1 varchar(10) = null
set @i = 2
while (@i <= @cant1)
BEGIN
IF (@i = 2 AND (select palabra from @palabras1 where nro = 1) = 'CALLE')
BEGIN
set @i = @i + 1
CONTINUE
END
IF (@i = 3 AND (select palabra from @palabras1 where nro = 1) = 'CALLE'
AND (select palabra from @palabras1 where nro = 2) in ('N', 'NRO', 'NRO.','N*','Nº'))
BEGIN
set @i = @i + 1
CONTINUE
END
set @pal = (select palabra from @palabras1 where nro = @i)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @pal = replace(@pal,',','')
set @pal = replace(@pal,'-','')
set @pal = replace(@pal,'.','')
set @Numero_1 = convert(int,@pal)
update @palabras1 set palabra = null where nro = @i
break
END
set @i = @i + 1
END
/*
select * from @palabras1
select @Numero_1 as altura
return
*/
/*
PARA LOS CASOS DE CALLES QUE EL NOMBRE ES UN NRO.
*/
declare @Calle varchar(100) = null
IF ((select palabra from @palabras1 where nro = 1) = 'CALLE')
BEGIN
set @pal = (select palabra from @palabras1 where nro = 2)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @calle = @pal
END
else
BEGIN
if ((select palabra from @palabras1 where nro = 2) in ('N','NRO','NRO.','N*','Nº'))
begin
set @pal = (select palabra from @palabras1 where nro = 3)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @calle = @pal
END
end
END
END
set @pal = (select palabra from @palabras1 where nro = 1)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @calle = @pal
END
---
declare @longitud smallint = 0
declare @largas smallint = 0,
@Cortas smallint = 0
declare @pal1 varchar(100) = null,
@buscar varchar(100) = null
set @i = 1
set @j = 1
while (@i <= @cant1)
begin
set @pal1 = (select palabra from @palabras1 where nro = @i)
if (@pal1 != 'PISO' and @pal1 not like 'PISO:%' and @pal1 not like 'DPTO:%' and @pal1 not like 'DTO:%'
and @pal1 != 'CALLE' and @pal1 != 'AVENIDA' and @pal1 != 'AV' and @pal1 != 'AV.' and @pal1 != 'AVDA' and @pal1 != 'AVDA.'
and @pal1 != 'PASAJE' and @pal1 != 'PJE' and @pal1 != 'PJE.')
begin
if (LEN(@pal1) > @longitud and len(@pal1) > 3)
set @buscar = @pal1
end
set @i = @i + 1
end
/*
set @buscar = '%' + @buscar + ' %'
if (@buscar is not null and @Numero_1 is not null)
set @buscar = @buscar + cast(@Numero_1 as varchar) + '%'
*/
/*
if (@proceso = 1)
begin
select @buscar, @Numero_1 return
end
*/
if (@provincia like 'CIUDAD%BUENOS AIRES')
set @provincia = 'CIUDAD%BUENOS AIRES'
--select @buscar, @provincia return
declare @encontrados table (cuit varchar(20), nombre varchar(200))
declare @domicilios table (id int, domicilio varchar(200), pai_nombre varchar(20), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10), created datetime)
declare @resultados table (cuit varchar(20), nombre varchar(200), domicilio varchar(200), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10))
declare @cuit_encontrado varchar(20), @nombre_encontrado varchar(200)
insert into @encontrados
select p.identificacion, p.nombre_persona--, d.*
from domicilios_todos d
inner join padrones p on p.identificacion = d.cuit and p.habilitado = 1 and p.identificador in ('CUIT','CUIL')
where prv_nombre like + '%' + @provincia + '%'
and domicilio like + '%' + @buscar + ' %' + iif(@Numero_1 is not null,cast(@Numero_1 as varchar),'') + '%'
and visible = 1 and cuit like '3%'
if @proceso = 1
begin
DECLARE C_padron CURSOR FOR
select distinct cuit,nombre
from @encontrados
OPEN C_Padron
FETCH NEXT FROM C_Padron INTO @cuit_encontrado, @nombre_encontrado
WHILE @@fetch_status = 0
BEGIN
delete from @domicilios
insert into @domicilios exec sp_obtener_domicilios @cuit_encontrado
insert into @resultados
select @cuit_encontrado, @nombre_encontrado, d.domicilio, d.prv_nombre, d.loc_nombre, d.codpos, d.tipo_domicilio
from @domicilios d
where prv_nombre like + '%' + @provincia + '%'
and domicilio like + '%' + @buscar + ' %' + iif(@Numero_1 is not null,cast(@Numero_1 as varchar),'') + '%'
FETCH NEXT FROM C_Padron INTO @cuit_encontrado, @nombre_encontrado
END
CLOSE C_Padron
DEALLOCATE C_Padron
select * from @resultados
end
else
begin
select distinct cuit, nombre, @buscar as buscar, @Numero_1 as altura from @encontrados
end
END
GO