Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
1| Name | Data Type | Length | Description |
|---|---|---|---|
| @cuit | varchar | 20 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
EXEC sp_obtener_domicilios_2019 '20335754655'
EXEC sp_obtener_domicilios '30546689979'
EXEC sp_obtener_domicilios '20085851471'
*/
CREATE OR ALTER PROCEDURE dbo.sp_obtener_domicilios_2019
@cuit varchar(20)
AS
BEGIN
declare @domicilios table
(id int identity,
domicilio varchar(500),
pai_nombre varchar(100),
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @MaxDomicilios int = 150000
declare @domicilios_ok table
(id int identity,
domicilio varchar(500),
pai_nombre varchar(100),
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @id int,
@domicilio varchar(500),
@pai_nombre varchar(100),
@prv_nombre varchar(100),
@loc_nombre varchar(100),
@codpos varchar(100),
@tipo_domicilio varchar(100),
@created datetime
declare @id2 int,
@domicilio2 varchar(500),
@pai_nombre2 varchar(100),
@prv_nombre2 varchar(100),
@loc_nombre2 varchar(100),
@codpos2 varchar(100),
@tipo_domicilio2 varchar(100),
@created2 datetime
declare @resp int, @total int = 0
select @total = count(distinct domicilio)
from domicilios_todos
where cuit = @cuit
and visible = 1
if (@total > @MaxDomicilios)
begin
select max(id_domicilio) as id,
replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
max(replace(codpos,'.','')) as codpos,
tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
from domicilios_todos
where cuit = @cuit
and visible = 1
group by replace(domicilio,'?',''), pai_nombre, prv_nombre, loc_nombre, tipo_domicilio
order by created desc
end
else
begin
insert into @domicilios (domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio,
created)
select top (@MaxDomicilios) replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
replace(codpos,'.','') as codpos,
tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
from domicilios_todos
where cuit = @cuit
and visible = 1
group by domicilio, pai_nombre, prv_nombre, loc_nombre, codpos, tipo_domicilio
order by tipo_domicilio, len(domicilio) desc, len(prv_nombre) desc, len(loc_nombre)
declare wc cursor for
select * from @domicilios
order by id
open wc
Fetch next from wc INTO
@id,
@domicilio,
@pai_nombre,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
if ((select count(*) from @domicilios where id = @id) = 0)
begin
Fetch next from wc INTO
@id,
@domicilio,
@pai_nombre,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
continue
end
declare wc2 cursor for
select * from @domicilios
where id > @id
order by id
open wc2
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_nombre2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
exec @resp = [sp_comparo_domicilios] @domicilio, @domicilio2
if (@resp = 1) -- son iguales
begin
if (@prv_nombre like 'NO INFORM%') set @prv_nombre = null
if (@prv_nombre2 like 'NO INFORM%') set @prv_nombre2 = null
if (@loc_nombre like 'NO INFORM%') set @loc_nombre = null
if (@loc_nombre2 like 'NO INFORM%') set @loc_nombre2 = null
if (@created2 > @created)
set @created = @created2
if (len(@domicilio2) > len(@domicilio) or @domicilio is null)
set @domicilio = @domicilio2
if (len(@prv_nombre2) > len(@prv_nombre) or @prv_nombre is null)
set @prv_nombre = @prv_nombre2
if (len(@loc_nombre2) > len(@loc_nombre) or @loc_nombre is null)
set @loc_nombre = @loc_nombre2
if (len(@pai_nombre2) > len(@pai_nombre) or @pai_nombre is null)
set @pai_nombre = @pai_nombre2
if (@pai_nombre2 = 'ARGENTINA' and (select isnumeric(@codpos2)) = 1 and len(@codpos2) > 4)
set @codpos2 = null
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (len(@codpos2) > len(@codpos) or @codpos is null)
set @codpos = @codpos2
if (@tipo_domicilio is null) set @tipo_domicilio = ''
if (select CHARINDEX(@tipo_domicilio2,@tipo_domicilio)) = 0
begin
set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
end
delete from @domicilios
where id = @id2
end
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (rtrim(ltrim(@loc_nombre)) = '') set @loc_nombre = null
if (rtrim(ltrim(@prv_nombre)) = '') set @prv_nombre = null
if (rtrim(ltrim(@pai_nombre)) = '') set @pai_nombre = null
update @domicilios
set domicilio = @domicilio,
loc_nombre = @loc_nombre,
prv_nombre = @prv_nombre,
pai_nombre = @pai_nombre,
codpos = @codpos,
tipo_domicilio = @tipo_domicilio,
created = @created
where id = @id
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_nombre2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
end
CLOSE wc2
DEALLOCATE wc2
Fetch next from wc INTO
@id,
@domicilio,
@pai_nombre,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
END
CLOSE wc
DEALLOCATE wc
/*
select * from @domicilios
order by created desc
*/
/*
EXEC sp_obtener_domicilios_2019 '20335754655'
*/
/* BORRAMOS LOS DOMICILIOS DEL CUIT PARA INSERTAR LOS DEPURADOS */
delete domicilios_todos where cuit = @cuit
DECLARE depurados CURSOR FOR
select * from @domicilios order by created desc
OPEN depurados
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
WHILE @@FETCH_STATUS = 0
BEGIN
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
DECLARE @n int = LEN(@tipo_domicilio)
DECLARE @i int = 1
DECLARE @tipodom VARCHAR(1)
WHILE (@i <= @n) BEGIN
SET @tipodom = SUBSTRING(@tipo_domicilio, @i, 1)
/*
select @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created,@tipodom
*/
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, procesado, isLast,prv_codigo)
values
(@cuit, @domicilio, 54, @pai_nombre, @prv_nombre, @loc_nombre, @codpos,GETDATE(), 1, @tipodom, 1, 0,0)
SET @i = @i + 1
END
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
END
CLOSE depurados
DEALLOCATE depurados
/*
--where id is not null
--order by id
*/
end
END
GO
GO
/*
EXEC sp_obtener_domicilios_2019 '20335754655'
EXEC sp_obtener_domicilios '30546689979'
EXEC sp_obtener_domicilios '20085851471'
*/
CREATE OR ALTER PROCEDURE dbo.sp_obtener_domicilios_2019
@cuit varchar(20)
AS
BEGIN
declare @domicilios table
(id int identity,
domicilio varchar(500),
pai_nombre varchar(100),
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @MaxDomicilios int = 150000
declare @domicilios_ok table
(id int identity,
domicilio varchar(500),
pai_nombre varchar(100),
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @id int,
@domicilio varchar(500),
@pai_nombre varchar(100),
@prv_nombre varchar(100),
@loc_nombre varchar(100),
@codpos varchar(100),
@tipo_domicilio varchar(100),
@created datetime
declare @id2 int,
@domicilio2 varchar(500),
@pai_nombre2 varchar(100),
@prv_nombre2 varchar(100),
@loc_nombre2 varchar(100),
@codpos2 varchar(100),
@tipo_domicilio2 varchar(100),
@created2 datetime
declare @resp int, @total int = 0
select @total = count(distinct domicilio)
from domicilios_todos
where cuit = @cuit
and visible = 1
if (@total > @MaxDomicilios)
begin
select max(id_domicilio) as id,
replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
max(replace(codpos,'.','')) as codpos,
tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
from domicilios_todos
where cuit = @cuit
and visible = 1
group by replace(domicilio,'?',''), pai_nombre, prv_nombre, loc_nombre, tipo_domicilio
order by created desc
end
else
begin
insert into @domicilios (domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio,
created)
select top (@MaxDomicilios) replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
replace(codpos,'.','') as codpos,
tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
from domicilios_todos
where cuit = @cuit
and visible = 1
group by domicilio, pai_nombre, prv_nombre, loc_nombre, codpos, tipo_domicilio
order by tipo_domicilio, len(domicilio) desc, len(prv_nombre) desc, len(loc_nombre)
declare wc cursor for
select * from @domicilios
order by id
open wc
Fetch next from wc INTO
@id,
@domicilio,
@pai_nombre,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
if ((select count(*) from @domicilios where id = @id) = 0)
begin
Fetch next from wc INTO
@id,
@domicilio,
@pai_nombre,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
continue
end
declare wc2 cursor for
select * from @domicilios
where id > @id
order by id
open wc2
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_nombre2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
exec @resp = [sp_comparo_domicilios] @domicilio, @domicilio2
if (@resp = 1) -- son iguales
begin
if (@prv_nombre like 'NO INFORM%') set @prv_nombre = null
if (@prv_nombre2 like 'NO INFORM%') set @prv_nombre2 = null
if (@loc_nombre like 'NO INFORM%') set @loc_nombre = null
if (@loc_nombre2 like 'NO INFORM%') set @loc_nombre2 = null
if (@created2 > @created)
set @created = @created2
if (len(@domicilio2) > len(@domicilio) or @domicilio is null)
set @domicilio = @domicilio2
if (len(@prv_nombre2) > len(@prv_nombre) or @prv_nombre is null)
set @prv_nombre = @prv_nombre2
if (len(@loc_nombre2) > len(@loc_nombre) or @loc_nombre is null)
set @loc_nombre = @loc_nombre2
if (len(@pai_nombre2) > len(@pai_nombre) or @pai_nombre is null)
set @pai_nombre = @pai_nombre2
if (@pai_nombre2 = 'ARGENTINA' and (select isnumeric(@codpos2)) = 1 and len(@codpos2) > 4)
set @codpos2 = null
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (len(@codpos2) > len(@codpos) or @codpos is null)
set @codpos = @codpos2
if (@tipo_domicilio is null) set @tipo_domicilio = ''
if (select CHARINDEX(@tipo_domicilio2,@tipo_domicilio)) = 0
begin
set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
end
delete from @domicilios
where id = @id2
end
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (rtrim(ltrim(@loc_nombre)) = '') set @loc_nombre = null
if (rtrim(ltrim(@prv_nombre)) = '') set @prv_nombre = null
if (rtrim(ltrim(@pai_nombre)) = '') set @pai_nombre = null
update @domicilios
set domicilio = @domicilio,
loc_nombre = @loc_nombre,
prv_nombre = @prv_nombre,
pai_nombre = @pai_nombre,
codpos = @codpos,
tipo_domicilio = @tipo_domicilio,
created = @created
where id = @id
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_nombre2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
end
CLOSE wc2
DEALLOCATE wc2
Fetch next from wc INTO
@id,
@domicilio,
@pai_nombre,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
END
CLOSE wc
DEALLOCATE wc
/*
select * from @domicilios
order by created desc
*/
/*
EXEC sp_obtener_domicilios_2019 '20335754655'
*/
/* BORRAMOS LOS DOMICILIOS DEL CUIT PARA INSERTAR LOS DEPURADOS */
delete domicilios_todos where cuit = @cuit
DECLARE depurados CURSOR FOR
select * from @domicilios order by created desc
OPEN depurados
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
WHILE @@FETCH_STATUS = 0
BEGIN
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
DECLARE @n int = LEN(@tipo_domicilio)
DECLARE @i int = 1
DECLARE @tipodom VARCHAR(1)
WHILE (@i <= @n) BEGIN
SET @tipodom = SUBSTRING(@tipo_domicilio, @i, 1)
/*
select @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created,@tipodom
*/
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, procesado, isLast,prv_codigo)
values
(@cuit, @domicilio, 54, @pai_nombre, @prv_nombre, @loc_nombre, @codpos,GETDATE(), 1, @tipodom, 1, 0,0)
SET @i = @i + 1
END
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
END
CLOSE depurados
DEALLOCATE depurados
/*
--where id is not null
--order by id
*/
end
END
GO
Depends On
2Used By
No items found