Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
1| Name | Data Type | Length | Description |
|---|---|---|---|
| @p_cuit | varchar | 50 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
/*
exec sp_depurar_domicilios '20335754655'
exec sp_obtener_domicilios '23183026429'
select * from domicilios_todos where cuit = '20335754655'
exec sp_depurar_domicilios '20335754655'
exec sp_obtener_domicilios '20335754655'
*/
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.sp_depurar_domicilios
-- Add the parameters for the stored procedure here
@p_cuit varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
if (@p_cuit is not null) 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 @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
insert into @domicilios (domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio,
created)
select top 150 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 = @p_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) begin
set @domicilio = @domicilio2
end
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
if (@tipo_domicilio2 = 'O' AND @tipo_domicilio = '')
set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
else
/* Sólo se agrega un tipo de domicilio a la misma ubicación si
el tipo a agregar NO es 'otro domicilio'*/
if (@tipo_domicilio2 != 'O')
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')
set @loc_nombre = null
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
/***/
UPDATE domicilios_todos SET visible = 0 WHERE cuit = @p_cuit AND visible = 1
DECLARE @codigo_provincia varchar(2)
DECLARE NUEVOS CURSOR FOR
select id,
domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio, created
from @domicilios
order by created desc
OPEN NUEVOS
FETCH NEXT FROM NUEVOS INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
WHILE @@FETCH_STATUS = 0 BEGIN
if (@prv_nombre is not null)
select @codigo_provincia = convert(varchar(2), codigo_afip)
from provincias
where country_code = 'AR'
and prv_nombre = @prv_nombre
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)
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, procesado, isLast)
values
(@p_cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prv_nombre, @loc_nombre, @codpos,
GETDATE(), 1, @tipodom, 1, 0)
SET @i = @i + 1
END
FETCH NEXT FROM NUEVOS INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
END
CLOSE NUEVOS
DEALLOCATE NUEVOS
/* Fin inserción nuevos registros unificados */
end
END
GO
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
/*
exec sp_depurar_domicilios '20335754655'
exec sp_obtener_domicilios '23183026429'
select * from domicilios_todos where cuit = '20335754655'
exec sp_depurar_domicilios '20335754655'
exec sp_obtener_domicilios '20335754655'
*/
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.sp_depurar_domicilios
-- Add the parameters for the stored procedure here
@p_cuit varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
if (@p_cuit is not null) 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 @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
insert into @domicilios (domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio,
created)
select top 150 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 = @p_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) begin
set @domicilio = @domicilio2
end
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
if (@tipo_domicilio2 = 'O' AND @tipo_domicilio = '')
set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
else
/* Sólo se agrega un tipo de domicilio a la misma ubicación si
el tipo a agregar NO es 'otro domicilio'*/
if (@tipo_domicilio2 != 'O')
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')
set @loc_nombre = null
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
/***/
UPDATE domicilios_todos SET visible = 0 WHERE cuit = @p_cuit AND visible = 1
DECLARE @codigo_provincia varchar(2)
DECLARE NUEVOS CURSOR FOR
select id,
domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio, created
from @domicilios
order by created desc
OPEN NUEVOS
FETCH NEXT FROM NUEVOS INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
WHILE @@FETCH_STATUS = 0 BEGIN
if (@prv_nombre is not null)
select @codigo_provincia = convert(varchar(2), codigo_afip)
from provincias
where country_code = 'AR'
and prv_nombre = @prv_nombre
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)
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, procesado, isLast)
values
(@p_cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prv_nombre, @loc_nombre, @codpos,
GETDATE(), 1, @tipodom, 1, 0)
SET @i = @i + 1
END
FETCH NEXT FROM NUEVOS INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
END
CLOSE NUEVOS
DEALLOCATE NUEVOS
/* Fin inserción nuevos registros unificados */
end
END
GO