Deberiamos saber que hace ese proceso y como son las tablas, pero seguro que
sacaremos el cursor y la operacion solo durara algunos minutos quizas!! :-)
--
---------------------------------------------------
Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
---------------------------------------------------
"Mike" <mi...@terra.com> escribió en el mensaje
news:089501c53b00$d8c1b760$a401...@phx.gbl...
Espero su amable ayuda
>-----Mensaje original-----
>.
>
Te recomiendo que postees la definicion de la tabla, asi como algunos datos
de ejemplo y el resultado esperado. De esa forma tendremos una mejor idea de
lo que se tiene y lo a donde se desea llegar.
AMB
Tengo una Tabla Principal que es la que Recorro, y dos
Tablas Secundarias una de Datos de Identidad y otra de
Saldos que lleno.
Este es una parte del Contenido de la Tabla Principal TP
que tiene un Solo Campo . Este se refiere a un Solo
Cliente
1E000428886620030430 120092920 1
0020344000000000000000006560NU#EZ PORRAS JOSE MARIA
2E0004288866001073141103060000000000000000004859340
2E0004288866001073841402290000000000000000004941900
2E0004288866001413142503060000007030000000009268704
2E0004288866001413142903010000000000000000009268704
2E0004288866001413812401000000000000000000001343154
2E0004288866001413842402090000000000000000007616404
Asi como este existen datos o lineas alrededor de 17
Millones,
Lo que Hago es usar un Proc Alm. En el que usao el
Declare Cursor , etc.
Por ejemplo , si la Cadena empieza con '1' son datos
para la Tabla Secundaria TS1 y si comienza con '2' para
la
Tabla Secundaria TS2.
El Nombre lo saco usando SUBSTRING, igual saco las
Cuentas Contables , su Codigo de Doc de Identidad, Nro de
Documento de Identidad,
Saldos, dias de atraso, Porcentajes de Calificación de
Riesgo.,etc
Es decir tomo cada Linea y tengo que desagregar datos y
enviarlos Bien a la Tabla Secundaria 1 o 2.
Ese es en Resumen el Problema.
Espero tu Amable ayuda o sugerencias
>-----Mensaje original-----
>> >"Mike" <mi...@terra.com> escribió en el mensaje
>> >news:089501c53b00$d8c1b760$a401...@phx.gbl...
>> >Hola a todos.
>> >Quiero saber si existe otra Forma de Recorrer una
Tabla
>> >SQL que tiene como 17 MIllones de Registros, la cual
se
>> >Recorre y linea a linea se llenan sus Datos a Otras 2
>> >Tablas (Ya que están en Codigos que tienen diferentes
>> >significados).
>> >Estoy usando un DECLARE CURSOR-OPEN CURSOR,etc.
>> >Pero el proceso me lleva como 7 u 8 horas.
>> >Quiero saber si puedo mejorar esto o que otra forma
puedo
>> >usar.
>> >
>> >
>> >
>> >
>> >
>> >.
>> >
>>
>.
>
declare @totalregistros int
set @totalregistros = select count(*) from tabla
--luego haces el alter a la tabla
(BEGIN TRANSACTION
ALTER TABLE dbo.PRODUCTOS ADD
Leido char(1) NULL
GO
COMMIT
--luego el cliclo
declare @registrosleido int = 0
while (@registrosleido < @totalregistros)
begin
set rowcount 1 --para seleccionar solo 1 registro
select @registroleido = select registro from tabla
where leido = null
--procesas la informacion
--luego debe actualizar ese registro para no leerlo de nuevo.
--debes hacerlo de tal forma where solo actualices el que leiste.
update Tabla set leido = 1
and where registro = @registrolido
@registrosleido = @registrosleido + 1
end
set rowcount 0
Si te aseguro que esto es mejor que un cursor. Debes eso si, controlar bien
las condiciones de salida del ciclo y si puedes obtener la llave primaria y
luego actualizar el registro leido preguntando por ella, perfecto.
Suerte.
"Mike" escribió:
CREATE TABLE #Origen (dato char(10))
INSERT #Origen SELECT '1abcdef'
INSERT #Origen SELECT '2345678'
INSERT #Origen SELECT '2465464'
INSERT #Origen SELECT '2458778'
CREATE TABLE #DestinoAlfa (dato1 char(2), dato2 char(4))
CREATE TABLE #DestinoNum (dato1 dec(3), dato2 dec(3))
INSERT #DestinoAlfa
SELECT SUBSTRING (dato, 2, 2), SUBSTRING (dato, 4, 4)
FROM #Origen
WHERE SUBSTRING (dato, 1, 1) = '1'
INSERT #DestinoNum
SELECT SUBSTRING (dato, 2, 3), SUBSTRING (dato, 5, 3)
FROM #Origen
WHERE SUBSTRING (dato, 1, 1) = '2'
SELECT * FROM #DestinoAlfa
SELECT * FROM #DestinoNum
"Mike" <Mi...@terra.com> escribió en el mensaje
news:0b7b01c53b79$085f92d0$a401...@phx.gbl...