-------------------------------------------------------
--Declaracion de variables necesarias para el ciclo
-------------------------------------------------------
DECLARE @origen TINYINT ,
@rut_origen INT ,
@tipo_direccion TINYINT ,
@direccion CHAR(70) ,
@comuna SMALLINT ,
@email CHAR(50) ,
@telefono CHAR(25) ,
@telefono2 CHAR(25) ,
@fax CHAR(25) ,
@estado TINYINT
-----------------------------------
--Declaro temporal
-----------------------------------
CREATE TABLE #direccionesTemp
(
id INT IDENTITY(1, 1) ,
cod_origen TINYINT,
rut_origen INT ,
cod_tipo_direccion TINYINT ,
direccion CHAR(255) ,
comuna SMALLINT ,
telefono CHAR(12) ,
estado TINYINT
)
CREATE INDEX I_direcciones_temp --El Indice es para aportar velocidad
ON #direccionesTemp(id) ;
-----------------------------------
--Lleno tabla temporal
-----------------------------------
INSERT INTO #direccionesTemp
SELECT cod_origen ,
rut_origen ,
cod_tipo_direccion ,
direccion ,
comuna ,
telefono ,
estado
FROM dbo.direcciones
----------------------------------------
--Variables de Recorrido
----------------------------------------
DECLARE @numeroDeRegistros INT
SET @numeroDeRegistros = ( SELECT COUNT(*)
FROM #direccionesTemp
)
DECLARE @recorridoWhile INT
SET @recorridoWhile = 1
-----------------------------------------
--recorrido
-----------------------------------------
WHILE ( @numeroDeRegistros > 0 --mientras,el numero de registros sea mayor a 0
AND @recorridoWhile <= @numeroDeRegistros --y mientras la variable de recorrido sea menor o igual a la cantidad de registros
)
BEGIN
--lleno mis variables
SELECT @origen = cod_origen ,
@rut_origen = rut_origen ,
@tipo_direccion = cod_tipo_direccion ,
@direccion = direccion ,
@comuna = comuna ,
@telefono = telefono ,
@estado = ISNULL(estado,0)
FROM #direccionesTemp
WHERE id = @recorridoWhile --las lleno con la data de la fila que voy recorriendo.
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO leasecom..t_clientes_direccion
( cod_origen ,
rut ,
tipo_direccion ,
correlativo ,
direccion ,
cod_comuna ,
email ,
telefono ,
estado
)
VALUES ( @origen ,
@rut_origen ,
@tipo_direccion ,
@correlativo ,
SUBSTRING(LTRIM(RTRIM(@direccion)), 1, 40) ,
@comuna , -- cod_comuna - smallint
NULL , -- email - varchar(255)
SUBSTRING(LTRIM(RTRIM(@telefono)), 1, 12) ,
@estado -- estado - tinyint
)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() as ErrorNumber, ERROR_MESSAGE() as ErrorMessage;
ROLLBACK TRANSACTION
END CATCH
SET @recorridoWhile = @recorridoWhile + 1
--Print para indicar en que parte del recorrido va (Opcional).
PRINT CONVERT(VARCHAR(100), @recorridoWhile )
END
DROP TABLE #direccionesTemp