Forums Últimos mensajes - Powered by IBM
 

Tiempo de Procesamiento de un SP

03/12/2004 - 03:31 por Ayuda para particionar una Tabla... | Informe spam
Hola Tengo un SP, que obtiene información de 3 tablas en un servidor, y por
medio de esa información graba en 5 tablas, se esta tardando muchisimo, en la
información fuente le agregue indices uno lo cree con las columnas
involucradas en el WHERE y en el orden de menor variación, hacia la mayor
variación de datos. Los otros indices los cree con el identificador de cada
tabla y ese se utiliza en el where. Pero no le he bajado el tiempo. Utilizo
cursores pues debo homologar cada registro y procesarlo. Se tarda
muchisisimo. Y debo migrar 3 millones de datos, Lo estoy ejecutando por
oficina, pero hay oficinas que tienen 500,000 registros, y se esta tardando
1000 reg por hora. Ya se imaginaran. Les anexo mi codigo

DROP PROCEDURE SIAC_SP_MIGRACION
GO
CREATE PROCEDURE dbo.SIAC_SP_MIGRACION @par_oficina int
AS
BEGIN
DECLARE
@pardoc_id_persona varchar(18),
@pardoc_id_rubro int,
@pardoc_forma_valorada int,
@pardoc_fecha_expedicion datetime,
@pardoc_fecha_expiracion datetime,
@pardoc_id_obs char(5),
@pardoc_id_obs2 char(5),
@pardoc_id_oficina int,
@pardoc_costo_ml money,
@pardoc_vigente int,
@parper_id_persona varchar(18),
@parper_nombre varchar(40),
@parper_apellido_p varchar(40),
@parper_apellido_m varchar(40),
@parper_fecha_nac datetime,
@parper_sexo char(1),
@parper_id_pais_natal int,
@parper_id_estado_natal char(2),
@parper_poblacion_natal varchar(40),
@parper_id_tez int,
@parper_id_complexion int,
@parper_estatura varchar(8),
@parper_peso varchar(8),
@parper_id_color_cabello int,
@parper_id_color_ojos int,
@parper_id_edo_civil char(1),
@parper_apellido_casada varchar(40),
@parper_poblacion varchar(40),
@parper_domicilio varchar(50),
@parper_cp char(5),
@parper_id_estado char(2),
@parper_id_pais int,
@parper_telefono varchar(15),
@parper_id_estudio int,
@parper_id_ocupacion int,
@parper_id_municipio varchar(10),
@parper_curp varchar(18),
@parcon_id_pais int,
@parcon_id_estado1 char(2),
@parcon_id_estado char(2),
@parcon_nombre varchar(120),
@parcon_direccion varchar(100),
@parcon_cp char(5),
@parcon_telefono varchar(15),
@encontro_cp_contacto int,
@nu_secuencial_persona numeric(9),
@nu_secuencia_documento int,
@nu_secuencia_contacto int,
@par_fh_sistema datetime,
@pais_per_natal_equiv char(3),
@pais_per_equiv char(3),
@pais_con_equiv char(3),
@estado_per_natal_equiv char(2),
@estado_per_equiv char(2),
@estado_con_equiv char(2),
@TranNombre varchar(20)


DECLARE CUR_DOCUMENTOS_ORI CURSOR FOR
SELECT
ID_PERSONA,
ID_RUBRO,
FORMA_VALORADA,
VIGENTE,
FECHA_EXPEDICION,
FECHA_EXPIRACION,
ID_OFICINA,
COSTO_ML,
ID_OBS,
ID_OBS2
FROM LIGA_SIACHO1_CAN14.SIC2002_CENTRAL.DBO.DOCUMENTO
WHERE ID_RUBRO NOT IN (27,28,99,100)
AND VIGENTE NOT IN (3,4)
AND FECHA_EXPEDICION BETWEEN '2000-07-14' AND '2004-11-30'
AND ID_OFICINA = @par_oficina
ORDER BY ID_PERSONA
OPEN CUR_DOCUMENTOS_ORI
FETCH NEXT FROM CUR_DOCUMENTOS_ORI
INTO @pardoc_id_persona,
@pardoc_id_rubro,
@pardoc_forma_valorada,
@pardoc_vigente,
@pardoc_fecha_expedicion,
@pardoc_fecha_expiracion,
@pardoc_id_oficina,
@pardoc_costo_ml,
@pardoc_id_obs,
@pardoc_id_obs2
IF (@pardoc_vigente = 0)
SELECT @pardoc_vigente = 5
IF (@pardoc_vigente = 1)
SELECT @pardoc_vigente = 4
IF (@pardoc_vigente = 2)
SELECT @pardoc_vigente = 6
IF (@pardoc_vigente = 7)
SELECT @pardoc_vigente = 3

IF (@pardoc_id_obs = ' ')
SELECT @pardoc_id_obs = NULL

IF (@pardoc_id_obs2 = ' ')
SELECT @pardoc_id_obs2 = NULL

SELECT @par_fh_sistema = getdate()

WHILE @@FETCH_STATUS = 0 --DOCUMENTOS
BEGIN
SELECT
@parper_id_persona =ID_PERSONA,
@parper_nombre =NOMBRE,
@parper_apellido_p =APELLIDO_P,
@parper_apellido_m =APELLIDO_M,
@parper_fecha_nac þCHA_NAC,
@parper_sexo =SEXO,
@parper_id_pais_natal =ID_PAIS_NATAL,
@parper_id_estado_natal =ID_ESTADO_NATAL,
@parper_poblacion_natal =POBLACION_NATAL,
@parper_id_tez =ID_TEZ,
@parper_id_complexion =ID_COMPLEXION,
@parper_estatura =ESTATURA,
@parper_peso =PESO,
@parper_id_color_cabello=ID_COLOR_CABELLO,
@parper_id_color_ojos =ID_COLOR_OJOS,
@parper_id_edo_civil =ID_EDO_CIVIL,
@parper_apellido_casada =APELLIDO_CASADA,
@parper_poblacion =POBLACION,
@parper_domicilio =DOMICILIO,
@parper_cp =CP,
@parper_id_estado =ID_ESTADO,
@parper_id_pais =ID_PAIS,
@parper_telefono =TELEFONO,
@parper_id_estudio =ID_ESTUDIO,
@parper_id_ocupacion =ID_OCUPACION,
@parper_id_municipio =ID_MUNICIPIO,
@parper_curp =CURP
FROM LIGA_SIACHO1_CAN14.SIC2002_CENTRAL.DBO.PERSONA
WHERE ID_PERSONA = @pardoc_id_persona

IF (@parper_apellido_casada = ' ')
SELECT @parper_apellido_casada = NULL

IF (@parper_apellido_casada IS NOT NULL AND @parper_sexo = 'H')
SELECT @parper_apellido_casada = NULL

IF (@parper_id_edo_civil <> 'C' OR
@parper_id_edo_civil <> 'D' OR
@parper_id_edo_civil <> 'V') AND
@parper_apellido_casada IS NOT NULL
SELECT @parper_apellido_casada = NULL

IF (@parper_poblacion_natal = ' ')
SELECT @parper_poblacion_natal = NULL

IF (@parper_curp = ' ')
SELECT @parper_curp = NULL

SELECT @pais_per_equiv = ID_PAIS
FROM SIAC_EQUIVALENCIAS_PAISES
WHERE ID_PAIS_ANTERIOR = @parper_id_pais
SELECT @pais_per_natal_equiv = ID_PAIS
FROM SIAC_EQUIVALENCIAS_PAISES
wHERE ID_PAIS_ANTERIOR = @parper_id_pais_natal

IF (@parper_id_tez <> 1 AND @parper_id_tez <> 2 AND
@parper_id_tez <> 3 AND @parper_id_tez <> 4 AND
@parper_id_tez <> 4 AND @parper_id_tez <> 5 AND
@parper_id_tez <> 6 AND @parper_id_tez <> 7)
SELECT @parper_id_tez = 0

IF (@parper_id_complexion <> 1 AND
@parper_id_complexion <> 2 AND
@parper_id_complexion <> 3 )
SELECT @parper_id_complexion = 0
IF (@parper_id_color_cabello <> 1 AND
@parper_id_color_cabello <> 2 AND
@parper_id_color_cabello <> 3 AND
@parper_id_color_cabello <> 4 AND
@parper_id_color_cabello <> 5 AND
@parper_id_color_cabello <> 6 AND
@parper_id_color_cabello <> 7 AND
@parper_id_color_cabello <> 8 AND
@parper_id_color_cabello <> 9 )
SELECT @parper_id_color_cabello = 0

IF (@parper_id_color_ojos <> 1 AND
@parper_id_color_ojos <> 2 AND
@parper_id_color_ojos <> 3 AND
@parper_id_color_ojos <> 4 AND
@parper_id_color_ojos <> 5 AND
@parper_id_color_ojos <> 6 AND
@parper_id_color_ojos <> 7 AND
@parper_id_color_ojos <> 8 AND
@parper_id_color_ojos <> 9 )
SELECT @parper_id_color_ojos = 0

IF (@parper_id_edo_civil <> 'D' AND
@parper_id_edo_civil <> 'C' AND
@parper_id_edo_civil <> 'V' AND
@parper_id_edo_civil <> 'S' AND
@parper_id_edo_civil <> 'U' )
SELECT @parper_id_edo_civil= '0'

IF (@parper_id_estudio <> 11 AND
@parper_id_estudio <> 21 AND
@parper_id_estudio <> 22 AND
@parper_id_estudio <> 23 AND
@parper_id_estudio <> 24 AND
@parper_id_estudio <> 25 AND
@parper_id_estudio <> 26 AND
@parper_id_estudio <> 27 AND
@parper_id_estudio <> 28 AND
@parper_id_estudio <> 31 AND
@parper_id_estudio <> 32 AND
@parper_id_estudio <> 33 AND
@parper_id_estudio <> 34 AND
@parper_id_estudio <> 41 AND
@parper_id_estudio <> 51 AND
@parper_id_estudio <> 52 AND
@parper_id_estudio <> 61 AND
@parper_id_estudio <> 62 AND
@parper_id_estudio <> 63 AND
@parper_id_estudio <> 64 AND
@parper_id_estudio <> 65 AND
@parper_id_estudio <> 66 )
SELECT @parper_id_estudio = 0

IF (@parper_id_ocupacion <> 1 AND
@parper_id_ocupacion <> 2 AND
@parper_id_ocupacion <> 3 AND
@parper_id_ocupacion <> 4 AND
@parper_id_ocupacion <> 5 AND
@parper_id_ocupacion <> 6 AND
@parper_id_ocupacion <> 7 AND
@parper_id_ocupacion <> 8 AND
@parper_id_ocupacion <> 9 AND
@parper_id_ocupacion <> 10 AND
@parper_id_ocupacion <> 11 AND
@parper_id_ocupacion <> 12 AND
@parper_id_ocupacion <> 13 AND
@parper_id_ocupacion <> 14 AND
@parper_id_ocupacion <> 15 AND
@parper_id_ocupacion <> 16 AND
@parper_id_ocupacion <> 17 AND
@parper_id_ocupacion <> 18 AND
@parper_id_ocupacion <> 19 AND
@parper_id_ocupacion <> 20 AND
@parper_id_ocupacion <> 21 AND
@parper_id_ocupacion <> 22 AND
@parper_id_ocupacion <> 23 AND
@parper_id_ocupacion <> 24 AND
@parper_id_ocupacion <> 25 )
SELECT @parper_id_ocupacion = 0


IF (len(@parper_estatura) = 0)
SELECT @parper_estatura = '0'
IF (len(@parper_peso) = 0)
SELECT @parper_peso = '0'
IF (cast(@parper_estatura as numeric(5,2)) > 2.5)
SELECT @parper_estatura = '1.75'
INSERT INTO SIAC_PERSONAS
(TX_PSEUDOCURP,TX_NOMBRE, TX_APELLIDO_P,
TX_APELLIDO_M, TX_APELLIDO_CASADA,
ID_STATUS_PERSONA, ID_SEXO,
ID_ESTADO_CIVIL, ID_TEZ,
ID_COMPLEXION, NU_ESTATURA,
NU_PESO, ID_COLOR_CABELLO,
ID_COLOR_OJOS, ID_ESTUDIO, ID_OCUPACION,
TX_DOMICILIO_UNIDO, TX_CP_ACTUAL_ABIERTO,
ID_PAIS_ACTUAL, TX_MUN_COUNTY_ACTUAL,
TX_POBLACION_ACTUAL, TX_TELEFONO,
TX_CURP, FH_NACIMIENTO,
ID_PAIS_NACIMIENTO,
TX_POBLACION_NACIMIENTO,FH_REGISTRO, ID_OFICINA)
VALUES
(@parper_id_persona, @parper_nombre, @parper_apellido_p,
@parper_apellido_m, @parper_apellido_casada,
3, @parper_sexo,
@parper_id_edo_civil, @parper_id_tez,
@parper_id_complexion, cast(@parper_estatura as
numeric(3,2)), cast(@parper_peso as numeric(3)),
@parper_id_color_cabello,@parper_id_color_ojos,
@parper_id_estudio, @parper_id_ocupacion,
@parper_domicilio, @parper_cp,
@pais_per_equiv, @parper_id_municipio,
@parper_poblacion, @parper_telefono,
@parper_curp, @parper_fecha_nac,

@pais_per_natal_equiv,@parper_poblacion_natal,@par_fh_sistema,
@par_oficina)
SELECT @nu_secuencial_persona = @@IDENTITY
SELECT @estado_per_equiv = ID_ESTADO
FROM SIAC_EQUIVALENCIAS_ESTADOS
WHERE ID_ESTADO_ANTERIOR = @parper_id_estado
AND ID_PAIS_ANTERIOR = @parper_id_pais

SELECT @estado_per_natal_equiv = ID_ESTADO
FROM SIAC_EQUIVALENCIAS_ESTADOS
WHERE ID_ESTADO_ANTERIOR = @parper_id_estado_natal
AND ID_PAIS_ANTERIOR = @parper_id_pais_natal

IF @estado_per_natal_equiv IS NULL
UPDATE SIAC_PERSONAS
SET TX_ESTADO_NACIMIENTO = @parper_id_estado_natal
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
ELSE
UPDATE SIAC_PERSONAS
SET ID_ESTADO_NACIMIENTO = @parper_id_estado_natal
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
SELECT @estado_per_equiv IS NULL
UPDATE SIAC_PERSONAS
SET TX_ESTADO_ACTUAL = @parper_id_estado
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
ELSE
UPDATE SIAC_PERSONAS
SET ID_ESTADO_ACTUAL = @parper_id_estado
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona

DECLARE CUR_CONTACTOS_ORI CURSOR FOR
SELECT
ID_PAIS,
ID_ESTADO,
NOMBRE,
DIRECCION,
CP,
TELEFONO
FROM LIGA_SIACHO1_CAN14.SIC2002_CENTRAL.DBO.CONTACTO
WHERE ID_PERSONA = @pardoc_id_persona


OPEN CUR_CONTACTOS_ORI

FETCH NEXT FROM CUR_CONTACTOS_ORI
INTO @parcon_id_pais,
@parcon_id_estado,
@parcon_nombre,
@parcon_direccion,
@parcon_cp,
@parcon_telefono

WHILE @@FETCH_STATUS = 0 --CONTACTOS
BEGIN

SELECT @pais_con_equiv = ID_PAIS
FROM SIAC_EQUIVALENCIAS_PAISES
WHERE ID_PAIS_ANTERIOR = @parcon_id_pais
SELECT @estado_con_equiv = ID_ESTADO
FROM SIAC_EQUIVALENCIAS_ESTADOS
WHERE ID_ESTADO_ANTERIOR = @parcon_id_estado
AND ID_PAIS_ANTERIOR = @parcon_id_pais

IF @estado_con_equiv IS NULL
BEGIN
INSERT INTO SIAC_ENLACES
(NU_SECUENCIAL_PERSONA, TX_NOMBRE_ORIG, TX_DIRECCION,
TX_TELEFONO, TX_CP_ABIERTO, ID_PAIS,
TX_ESTADO,ID_TIPO_VINCULO)
VALUES
(@nu_secuencial_persona,@parcon_nombre, @parcon_direccion,
@parcon_telefono, @parcon_cp, @pais_con_equiv,
@parcon_id_estado,2)
END
ELSE
BEGIN
INSERT INTO SIAC_ENLACES
(NU_SECUENCIAL_PERSONA, TX_NOMBRE_ORIG, TX_DIRECCION,
TX_TELEFONO, TX_CP_ABIERTO, ID_PAIS,
ID_ESTADO,ID_TIPO_VINCULO)
VALUES
(@nu_secuencial_persona,@parcon_nombre,
@parcon_direccion,
@parcon_telefono, @parcon_cp, @pais_con_equiv,
@parcon_id_estado,2)
END
SELECT @nu_secuencia_contacto = @@IDENTITY
SELECT @encontro_cp_contacto = 1
FROM SIAC_CAT_CODIGOS_POSTALES
WHERE ID_PAIS = @parcon_id_pais
AND ID_ESTADO = @parcon_id_estado
AND NU_CP = @parcon_cp

IF @encontro_cp_contacto = 1
UPDATE SIAC_ENLACES
SET NU_CP = @parcon_cp
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
ELSE
UPDATE SIAC_ENLACES
SET TX_CP_ABIERTO = @parcon_cp
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona

FETCH NEXT FROM CUR_CONTACTOS_ORI
INTO @parcon_id_pais,
@parcon_id_estado,
@parcon_nombre,
@parcon_direccion,
@parcon_cp,
@parcon_telefono
END -- WHILE CONTACTOS
CLOSE CUR_CONTACTOS_ORI
DEALLOCATE CUR_CONTACTOS_ORI
INSERT INTO SIAC_DOCUMENTOS
(NU_SECUENCIAL_PERSONA, ID_RUBRO,
NU_FORMA_VALORADA, ID_STATUS_DOCUMENTO, FH_EXPEDICION,
FH_EXPIRACION, ID_OFICINA , MO_COSTO_ML,
ID_OBS, ID_OBS2)
VALUES
(@nu_secuencial_persona, @pardoc_id_rubro,
@pardoc_forma_valorada, @pardoc_vigente,
@pardoc_fecha_expedicion,
@pardoc_fecha_expiracion,@pardoc_id_oficina, @pardoc_costo_ml,
@pardoc_id_obs, @pardoc_id_obs2)

SELECT @nu_secuencia_documento = @@IDENTITY

INSERT INTO SIAC_IDENTIFICADORES_ANTERIORES_NUEVOS
(ID_PERSONA, NU_SECUENCIAL_PERSONA,FH_REGISTRO)
VALUES
(@parper_id_persona, @nu_secuencial_persona,@par_fh_sistema)

INSERT INTO SIAC_DOCUMENTOS_STATUS
(NU_SECUENCIAL_PERSONA, NU_SECUENCIA_DOCUMENTO,
ID_PERSONA, VIGENTE, FH_REGISTRO)
VALUES
(@nu_secuencial_persona, @nu_secuencia_documento,
@parper_id_persona, @pardoc_vigente, @par_fh_sistema)


FETCH NEXT FROM CUR_DOCUMENTOS_ORI
INTO @pardoc_id_persona,
@pardoc_id_rubro,
@pardoc_forma_valorada,
@pardoc_vigente,
@pardoc_fecha_expedicion,
@pardoc_fecha_expiracion,
@pardoc_id_oficina,
@pardoc_costo_ml,
@pardoc_id_obs,
@pardoc_id_obs2
IF (@pardoc_vigente = 0)
SELECT @pardoc_vigente = 5
IF (@pardoc_vigente = 1)
SELECT @pardoc_vigente = 4
IF (@pardoc_vigente = 2)
SELECT @pardoc_vigente = 6
IF (@pardoc_vigente = 7)
SELECT @pardoc_vigente = 3

IF (@pardoc_id_obs = ' ')
SELECT @pardoc_id_obs = NULL

IF (@pardoc_id_obs2 = ' ')
SELECT @pardoc_id_obs2 = NULL

END --WHILE DOCUMENTOS
CLOSE CUR_DOCUMENTOS_ORI
DEALLOCATE CUR_DOCUMENTOS_ORI
END
GO

EXEC SIAC_SP_MIGRACION 871

Tampoco me ha funcionado la transacción... Me es muy importante correr este
SP más rapido, de 3000,000 , 1000 por hora es demasiado lento.
mil gracias
Betzaé
 

Leer las respuestas

#1 MAXI
03/12/2004 - 03:49 | Informe spam
Hola, es que el uso de cursores es muy malo de verdad, deberias ver la forma
de poder sacarlo




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Ayuda para particionar una Tabla..."
escribió en el
mensaje news:
Hola Tengo un SP, que obtiene información de 3 tablas en un servidor, y
por
medio de esa información graba en 5 tablas, se esta tardando muchisimo, en
la
información fuente le agregue indices uno lo cree con las columnas
involucradas en el WHERE y en el orden de menor variación, hacia la mayor
variación de datos. Los otros indices los cree con el identificador de
cada
tabla y ese se utiliza en el where. Pero no le he bajado el tiempo.
Utilizo
cursores pues debo homologar cada registro y procesarlo. Se tarda
muchisisimo. Y debo migrar 3 millones de datos, Lo estoy ejecutando por
oficina, pero hay oficinas que tienen 500,000 registros, y se esta
tardando
1000 reg por hora. Ya se imaginaran. Les anexo mi codigo

DROP PROCEDURE SIAC_SP_MIGRACION
GO
CREATE PROCEDURE dbo.SIAC_SP_MIGRACION @par_oficina int
AS
BEGIN
DECLARE
@pardoc_id_persona varchar(18),
@pardoc_id_rubro int,
@pardoc_forma_valorada int,
@pardoc_fecha_expedicion datetime,
@pardoc_fecha_expiracion datetime,
@pardoc_id_obs char(5),
@pardoc_id_obs2 char(5),
@pardoc_id_oficina int,
@pardoc_costo_ml money,
@pardoc_vigente int,
@parper_id_persona varchar(18),
@parper_nombre varchar(40),
@parper_apellido_p varchar(40),
@parper_apellido_m varchar(40),
@parper_fecha_nac datetime,
@parper_sexo char(1),
@parper_id_pais_natal int,
@parper_id_estado_natal char(2),
@parper_poblacion_natal varchar(40),
@parper_id_tez int,
@parper_id_complexion int,
@parper_estatura varchar(8),
@parper_peso varchar(8),
@parper_id_color_cabello int,
@parper_id_color_ojos int,
@parper_id_edo_civil char(1),
@parper_apellido_casada varchar(40),
@parper_poblacion varchar(40),
@parper_domicilio varchar(50),
@parper_cp char(5),
@parper_id_estado char(2),
@parper_id_pais int,
@parper_telefono varchar(15),
@parper_id_estudio int,
@parper_id_ocupacion int,
@parper_id_municipio varchar(10),
@parper_curp varchar(18),
@parcon_id_pais int,
@parcon_id_estado1 char(2),
@parcon_id_estado char(2),
@parcon_nombre varchar(120),
@parcon_direccion varchar(100),
@parcon_cp char(5),
@parcon_telefono varchar(15),
@encontro_cp_contacto int,
@nu_secuencial_persona numeric(9),
@nu_secuencia_documento int,
@nu_secuencia_contacto int,
@par_fh_sistema datetime,
@pais_per_natal_equiv char(3),
@pais_per_equiv char(3),
@pais_con_equiv char(3),
@estado_per_natal_equiv char(2),
@estado_per_equiv char(2),
@estado_con_equiv char(2),
@TranNombre varchar(20)


DECLARE CUR_DOCUMENTOS_ORI CURSOR FOR
SELECT
ID_PERSONA,
ID_RUBRO,
FORMA_VALORADA,
VIGENTE,
FECHA_EXPEDICION,
FECHA_EXPIRACION,
ID_OFICINA,
COSTO_ML,
ID_OBS,
ID_OBS2
FROM LIGA_SIACHO1_CAN14.SIC2002_CENTRAL.DBO.DOCUMENTO
WHERE ID_RUBRO NOT IN (27,28,99,100)
AND VIGENTE NOT IN (3,4)
AND FECHA_EXPEDICION BETWEEN '2000-07-14' AND '2004-11-30'
AND ID_OFICINA = @par_oficina
ORDER BY ID_PERSONA
OPEN CUR_DOCUMENTOS_ORI
FETCH NEXT FROM CUR_DOCUMENTOS_ORI
INTO @pardoc_id_persona,
@pardoc_id_rubro,
@pardoc_forma_valorada,
@pardoc_vigente,
@pardoc_fecha_expedicion,
@pardoc_fecha_expiracion,
@pardoc_id_oficina,
@pardoc_costo_ml,
@pardoc_id_obs,
@pardoc_id_obs2
IF (@pardoc_vigente = 0)
SELECT @pardoc_vigente = 5
IF (@pardoc_vigente = 1)
SELECT @pardoc_vigente = 4
IF (@pardoc_vigente = 2)
SELECT @pardoc_vigente = 6
IF (@pardoc_vigente = 7)
SELECT @pardoc_vigente = 3

IF (@pardoc_id_obs = ' ')
SELECT @pardoc_id_obs = NULL

IF (@pardoc_id_obs2 = ' ')
SELECT @pardoc_id_obs2 = NULL

SELECT @par_fh_sistema = getdate()

WHILE @@FETCH_STATUS = 0 --DOCUMENTOS
BEGIN
SELECT
@parper_id_persona =ID_PERSONA,
@parper_nombre =NOMBRE,
@parper_apellido_p =APELLIDO_P,
@parper_apellido_m =APELLIDO_M,
@parper_fecha_nac þCHA_NAC,
@parper_sexo =SEXO,
@parper_id_pais_natal =ID_PAIS_NATAL,
@parper_id_estado_natal =ID_ESTADO_NATAL,
@parper_poblacion_natal =POBLACION_NATAL,
@parper_id_tez =ID_TEZ,
@parper_id_complexion =ID_COMPLEXION,
@parper_estatura =ESTATURA,
@parper_peso =PESO,
@parper_id_color_cabello=ID_COLOR_CABELLO,
@parper_id_color_ojos =ID_COLOR_OJOS,
@parper_id_edo_civil =ID_EDO_CIVIL,
@parper_apellido_casada =APELLIDO_CASADA,
@parper_poblacion =POBLACION,
@parper_domicilio =DOMICILIO,
@parper_cp =CP,
@parper_id_estado =ID_ESTADO,
@parper_id_pais =ID_PAIS,
@parper_telefono =TELEFONO,
@parper_id_estudio =ID_ESTUDIO,
@parper_id_ocupacion =ID_OCUPACION,
@parper_id_municipio =ID_MUNICIPIO,
@parper_curp =CURP
FROM LIGA_SIACHO1_CAN14.SIC2002_CENTRAL.DBO.PERSONA
WHERE ID_PERSONA = @pardoc_id_persona

IF (@parper_apellido_casada = ' ')
SELECT @parper_apellido_casada = NULL

IF (@parper_apellido_casada IS NOT NULL AND @parper_sexo = 'H')
SELECT @parper_apellido_casada = NULL

IF (@parper_id_edo_civil <> 'C' OR
@parper_id_edo_civil <> 'D' OR
@parper_id_edo_civil <> 'V') AND
@parper_apellido_casada IS NOT NULL
SELECT @parper_apellido_casada = NULL

IF (@parper_poblacion_natal = ' ')
SELECT @parper_poblacion_natal = NULL

IF (@parper_curp = ' ')
SELECT @parper_curp = NULL

SELECT @pais_per_equiv = ID_PAIS
FROM SIAC_EQUIVALENCIAS_PAISES
WHERE ID_PAIS_ANTERIOR = @parper_id_pais
SELECT @pais_per_natal_equiv = ID_PAIS
FROM SIAC_EQUIVALENCIAS_PAISES
wHERE ID_PAIS_ANTERIOR = @parper_id_pais_natal

IF (@parper_id_tez <> 1 AND @parper_id_tez <> 2 AND
@parper_id_tez <> 3 AND @parper_id_tez <> 4 AND
@parper_id_tez <> 4 AND @parper_id_tez <> 5 AND
@parper_id_tez <> 6 AND @parper_id_tez <> 7)
SELECT @parper_id_tez = 0

IF (@parper_id_complexion <> 1 AND
@parper_id_complexion <> 2 AND
@parper_id_complexion <> 3 )
SELECT @parper_id_complexion = 0
IF (@parper_id_color_cabello <> 1 AND
@parper_id_color_cabello <> 2 AND
@parper_id_color_cabello <> 3 AND
@parper_id_color_cabello <> 4 AND
@parper_id_color_cabello <> 5 AND
@parper_id_color_cabello <> 6 AND
@parper_id_color_cabello <> 7 AND
@parper_id_color_cabello <> 8 AND
@parper_id_color_cabello <> 9 )
SELECT @parper_id_color_cabello = 0

IF (@parper_id_color_ojos <> 1 AND
@parper_id_color_ojos <> 2 AND
@parper_id_color_ojos <> 3 AND
@parper_id_color_ojos <> 4 AND
@parper_id_color_ojos <> 5 AND
@parper_id_color_ojos <> 6 AND
@parper_id_color_ojos <> 7 AND
@parper_id_color_ojos <> 8 AND
@parper_id_color_ojos <> 9 )
SELECT @parper_id_color_ojos = 0

IF (@parper_id_edo_civil <> 'D' AND
@parper_id_edo_civil <> 'C' AND
@parper_id_edo_civil <> 'V' AND
@parper_id_edo_civil <> 'S' AND
@parper_id_edo_civil <> 'U' )
SELECT @parper_id_edo_civil= '0'

IF (@parper_id_estudio <> 11 AND
@parper_id_estudio <> 21 AND
@parper_id_estudio <> 22 AND
@parper_id_estudio <> 23 AND
@parper_id_estudio <> 24 AND
@parper_id_estudio <> 25 AND
@parper_id_estudio <> 26 AND
@parper_id_estudio <> 27 AND
@parper_id_estudio <> 28 AND
@parper_id_estudio <> 31 AND
@parper_id_estudio <> 32 AND
@parper_id_estudio <> 33 AND
@parper_id_estudio <> 34 AND
@parper_id_estudio <> 41 AND
@parper_id_estudio <> 51 AND
@parper_id_estudio <> 52 AND
@parper_id_estudio <> 61 AND
@parper_id_estudio <> 62 AND
@parper_id_estudio <> 63 AND
@parper_id_estudio <> 64 AND
@parper_id_estudio <> 65 AND
@parper_id_estudio <> 66 )
SELECT @parper_id_estudio = 0

IF (@parper_id_ocupacion <> 1 AND
@parper_id_ocupacion <> 2 AND
@parper_id_ocupacion <> 3 AND
@parper_id_ocupacion <> 4 AND
@parper_id_ocupacion <> 5 AND
@parper_id_ocupacion <> 6 AND
@parper_id_ocupacion <> 7 AND
@parper_id_ocupacion <> 8 AND
@parper_id_ocupacion <> 9 AND
@parper_id_ocupacion <> 10 AND
@parper_id_ocupacion <> 11 AND
@parper_id_ocupacion <> 12 AND
@parper_id_ocupacion <> 13 AND
@parper_id_ocupacion <> 14 AND
@parper_id_ocupacion <> 15 AND
@parper_id_ocupacion <> 16 AND
@parper_id_ocupacion <> 17 AND
@parper_id_ocupacion <> 18 AND
@parper_id_ocupacion <> 19 AND
@parper_id_ocupacion <> 20 AND
@parper_id_ocupacion <> 21 AND
@parper_id_ocupacion <> 22 AND
@parper_id_ocupacion <> 23 AND
@parper_id_ocupacion <> 24 AND
@parper_id_ocupacion <> 25 )
SELECT @parper_id_ocupacion = 0


IF (len(@parper_estatura) = 0)
SELECT @parper_estatura = '0'
IF (len(@parper_peso) = 0)
SELECT @parper_peso = '0'
IF (cast(@parper_estatura as numeric(5,2)) > 2.5)
SELECT @parper_estatura = '1.75'
INSERT INTO SIAC_PERSONAS
(TX_PSEUDOCURP,TX_NOMBRE, TX_APELLIDO_P,
TX_APELLIDO_M, TX_APELLIDO_CASADA,
ID_STATUS_PERSONA, ID_SEXO,
ID_ESTADO_CIVIL, ID_TEZ,
ID_COMPLEXION, NU_ESTATURA,
NU_PESO, ID_COLOR_CABELLO,
ID_COLOR_OJOS, ID_ESTUDIO, ID_OCUPACION,
TX_DOMICILIO_UNIDO, TX_CP_ACTUAL_ABIERTO,
ID_PAIS_ACTUAL, TX_MUN_COUNTY_ACTUAL,
TX_POBLACION_ACTUAL, TX_TELEFONO,
TX_CURP, FH_NACIMIENTO,
ID_PAIS_NACIMIENTO,
TX_POBLACION_NACIMIENTO,FH_REGISTRO, ID_OFICINA)
VALUES
(@parper_id_persona, @parper_nombre, @parper_apellido_p,
@parper_apellido_m, @parper_apellido_casada,
3, @parper_sexo,
@parper_id_edo_civil, @parper_id_tez,
@parper_id_complexion, cast(@parper_estatura as
numeric(3,2)), cast(@parper_peso as numeric(3)),
@parper_id_color_cabello,@parper_id_color_ojos,
@parper_id_estudio, @parper_id_ocupacion,
@parper_domicilio, @parper_cp,
@pais_per_equiv, @parper_id_municipio,
@parper_poblacion, @parper_telefono,
@parper_curp, @parper_fecha_nac,

@pais_per_natal_equiv,@parper_poblacion_natal,@par_fh_sistema,
@par_oficina)
SELECT @nu_secuencial_persona = @@IDENTITY
SELECT @estado_per_equiv = ID_ESTADO
FROM SIAC_EQUIVALENCIAS_ESTADOS
WHERE ID_ESTADO_ANTERIOR = @parper_id_estado
AND ID_PAIS_ANTERIOR = @parper_id_pais

SELECT @estado_per_natal_equiv = ID_ESTADO
FROM SIAC_EQUIVALENCIAS_ESTADOS
WHERE ID_ESTADO_ANTERIOR = @parper_id_estado_natal
AND ID_PAIS_ANTERIOR = @parper_id_pais_natal

IF @estado_per_natal_equiv IS NULL
UPDATE SIAC_PERSONAS
SET TX_ESTADO_NACIMIENTO = @parper_id_estado_natal
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
ELSE
UPDATE SIAC_PERSONAS
SET ID_ESTADO_NACIMIENTO = @parper_id_estado_natal
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
SELECT @estado_per_equiv IS NULL
UPDATE SIAC_PERSONAS
SET TX_ESTADO_ACTUAL = @parper_id_estado
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
ELSE
UPDATE SIAC_PERSONAS
SET ID_ESTADO_ACTUAL = @parper_id_estado
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona

DECLARE CUR_CONTACTOS_ORI CURSOR FOR
SELECT
ID_PAIS,
ID_ESTADO,
NOMBRE,
DIRECCION,
CP,
TELEFONO
FROM LIGA_SIACHO1_CAN14.SIC2002_CENTRAL.DBO.CONTACTO
WHERE ID_PERSONA = @pardoc_id_persona


OPEN CUR_CONTACTOS_ORI

FETCH NEXT FROM CUR_CONTACTOS_ORI
INTO @parcon_id_pais,
@parcon_id_estado,
@parcon_nombre,
@parcon_direccion,
@parcon_cp,
@parcon_telefono

WHILE @@FETCH_STATUS = 0 --CONTACTOS
BEGIN

SELECT @pais_con_equiv = ID_PAIS
FROM SIAC_EQUIVALENCIAS_PAISES
WHERE ID_PAIS_ANTERIOR = @parcon_id_pais
SELECT @estado_con_equiv = ID_ESTADO
FROM SIAC_EQUIVALENCIAS_ESTADOS
WHERE ID_ESTADO_ANTERIOR = @parcon_id_estado
AND ID_PAIS_ANTERIOR = @parcon_id_pais

IF @estado_con_equiv IS NULL
BEGIN
INSERT INTO SIAC_ENLACES
(NU_SECUENCIAL_PERSONA, TX_NOMBRE_ORIG, TX_DIRECCION,
TX_TELEFONO, TX_CP_ABIERTO, ID_PAIS,
TX_ESTADO,ID_TIPO_VINCULO)
VALUES
(@nu_secuencial_persona,@parcon_nombre, @parcon_direccion,
@parcon_telefono, @parcon_cp, @pais_con_equiv,
@parcon_id_estado,2)
END
ELSE
BEGIN
INSERT INTO SIAC_ENLACES
(NU_SECUENCIAL_PERSONA, TX_NOMBRE_ORIG, TX_DIRECCION,
TX_TELEFONO, TX_CP_ABIERTO, ID_PAIS,
ID_ESTADO,ID_TIPO_VINCULO)
VALUES
(@nu_secuencial_persona,@parcon_nombre,
@parcon_direccion,
@parcon_telefono, @parcon_cp,
@pais_con_equiv,
@parcon_id_estado,2)
END
SELECT @nu_secuencia_contacto = @@IDENTITY
SELECT @encontro_cp_contacto = 1
FROM SIAC_CAT_CODIGOS_POSTALES
WHERE ID_PAIS = @parcon_id_pais
AND ID_ESTADO = @parcon_id_estado
AND NU_CP = @parcon_cp

IF @encontro_cp_contacto = 1
UPDATE SIAC_ENLACES
SET NU_CP = @parcon_cp
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona
ELSE
UPDATE SIAC_ENLACES
SET TX_CP_ABIERTO = @parcon_cp
WHERE NU_SECUENCIAL_PERSONA = @nu_secuencial_persona

FETCH NEXT FROM CUR_CONTACTOS_ORI
INTO @parcon_id_pais,
@parcon_id_estado,
@parcon_nombre,
@parcon_direccion,
@parcon_cp,
@parcon_telefono
END -- WHILE CONTACTOS
CLOSE CUR_CONTACTOS_ORI
DEALLOCATE CUR_CONTACTOS_ORI
INSERT INTO SIAC_DOCUMENTOS
(NU_SECUENCIAL_PERSONA, ID_RUBRO,
NU_FORMA_VALORADA, ID_STATUS_DOCUMENTO, FH_EXPEDICION,
FH_EXPIRACION, ID_OFICINA , MO_COSTO_ML,
ID_OBS, ID_OBS2)
VALUES
(@nu_secuencial_persona, @pardoc_id_rubro,
@pardoc_forma_valorada, @pardoc_vigente,
@pardoc_fecha_expedicion,
@pardoc_fecha_expiracion,@pardoc_id_oficina,
@pardoc_costo_ml,
@pardoc_id_obs, @pardoc_id_obs2)

SELECT @nu_secuencia_documento = @@IDENTITY

INSERT INTO SIAC_IDENTIFICADORES_ANTERIORES_NUEVOS
(ID_PERSONA, NU_SECUENCIAL_PERSONA,FH_REGISTRO)
VALUES
(@parper_id_persona,
@nu_secuencial_persona,@par_fh_sistema)

INSERT INTO SIAC_DOCUMENTOS_STATUS
(NU_SECUENCIAL_PERSONA, NU_SECUENCIA_DOCUMENTO,
ID_PERSONA, VIGENTE, FH_REGISTRO)
VALUES
(@nu_secuencial_persona, @nu_secuencia_documento,
@parper_id_persona, @pardoc_vigente, @par_fh_sistema)


FETCH NEXT FROM CUR_DOCUMENTOS_ORI
INTO @pardoc_id_persona,
@pardoc_id_rubro,
@pardoc_forma_valorada,
@pardoc_vigente,
@pardoc_fecha_expedicion,
@pardoc_fecha_expiracion,
@pardoc_id_oficina,
@pardoc_costo_ml,
@pardoc_id_obs,
@pardoc_id_obs2
IF (@pardoc_vigente = 0)
SELECT @pardoc_vigente = 5
IF (@pardoc_vigente = 1)
SELECT @pardoc_vigente = 4
IF (@pardoc_vigente = 2)
SELECT @pardoc_vigente = 6
IF (@pardoc_vigente = 7)
SELECT @pardoc_vigente = 3

IF (@pardoc_id_obs = ' ')
SELECT @pardoc_id_obs = NULL

IF (@pardoc_id_obs2 = ' ')
SELECT @pardoc_id_obs2 = NULL

END --WHILE DOCUMENTOS
CLOSE CUR_DOCUMENTOS_ORI
DEALLOCATE CUR_DOCUMENTOS_ORI
END
GO

EXEC SIAC_SP_MIGRACION 871

Tampoco me ha funcionado la transacción... Me es muy importante correr
este
SP más rapido, de 3000,000 , 1000 por hora es demasiado lento.
mil gracias
Betzaé

Preguntas similares