Recorrer Tabla SQL

07/04/2005 - 01:32 por Mike | Informe spam
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.

Preguntas similare

Leer las respuestas

#1 MAXI
07/04/2005 - 02:24 | Informe spam
Hola Mike, claro que puedes, es mas usar cursores es una muy mala idea en
sqlserver y viene muy bien tu comentario :-)

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" escribió en el mensaje
news:089501c53b00$d8c1b760$
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.
Respuesta Responder a este mensaje
#2 mike
07/04/2005 - 02:35 | Informe spam
Gracias Por Tu Respuesta Maxi.
en Cada linea o Registro de la Tabla Principal o Fuente.
Existen Datos en Codigos cada uno de los Cuales segun su
Valor puede Tener diferentes Significados. Tambien puede
haber una Cadena con Los Apellidos y Nombres seguidos por
lo que debemos usar SUBSTRING, y asi de toda la Cadena,
se extrae informacion que luego de "procesada" va bien a
la Tabla Secundaria 1 o Tabla Secundaria 2.

Espero su amable ayuda
Hola Mike, claro que puedes, es mas usar cursores es una


muy mala idea en
sqlserver y viene muy bien tu comentario :-)

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" escribió en el mensaje
news:089501c53b00$d8c1b760$
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.





.

Respuesta Responder a este mensaje
#3 Alejandro Mesa
07/04/2005 - 14:05 | Informe spam
Mike,

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

"mike" wrote:

Gracias Por Tu Respuesta Maxi.
en Cada linea o Registro de la Tabla Principal o Fuente.
Existen Datos en Codigos cada uno de los Cuales segun su
Valor puede Tener diferentes Significados. Tambien puede
haber una Cadena con Los Apellidos y Nombres seguidos por
lo que debemos usar SUBSTRING, y asi de toda la Cadena,
se extrae informacion que luego de "procesada" va bien a
la Tabla Secundaria 1 o Tabla Secundaria 2.

Espero su amable ayuda
>Hola Mike, claro que puedes, es mas usar cursores es una
muy mala idea en
>sqlserver y viene muy bien tu comentario :-)
>
>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" escribió en el mensaje
>news:089501c53b00$d8c1b760$
>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.
>
>
>
>
>
>.
>

Respuesta Responder a este mensaje
#4 Mike
07/04/2005 - 15:52 | Informe spam
Caso de RECORRER TABLA SQL.



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


Mike,

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

"mike" wrote:

Gracias Por Tu Respuesta Maxi.
en Cada linea o Registro de la Tabla Principal o




Fuente.
Existen Datos en Codigos cada uno de los Cuales segun




su
Valor puede Tener diferentes Significados. Tambien




puede
haber una Cadena con Los Apellidos y Nombres seguidos




por
lo que debemos usar SUBSTRING, y asi de toda la




Cadena,
se extrae informacion que luego de "procesada" va bien




a
la Tabla Secundaria 1 o Tabla Secundaria 2.

Espero su amable ayuda
>Hola Mike, claro que puedes, es mas usar cursores es




una
muy mala idea en
>sqlserver y viene muy bien tu comentario :-)
>
>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" escribió en el mensaje
>news:089501c53b00$d8c1b760$
>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.
>
>
>
>
>
>.
>



.

Respuesta Responder a este mensaje
#5 Porras
08/04/2005 - 00:35 | Informe spam
Mike: Efectivamente con un cursor es muy lento recorrer la tabla. No se si
esta sea la mejor forma de hacerlo pero, otra forma de hacer es haciento tu
mismo una iteración. Por ejemplo podrias agregar una columna a la tabla con
un alter; luego en un ciclo con una condicion que tu controlres (por ejemplo
while contador < 17 millones) ir leyendo uno a uno los registros que no tenga
actualizada el campo "leido"Por ejemplo:


declare @totalregistros int
set @totalregistros = select count(*) from tabla
(BEGIN TRANSACTION
ALTER TABLE dbo.PRODUCTOS ADD
Leido char(1) NULL
GO
COMMIT

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


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ó:

Caso de RECORRER TABLA SQL.



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


>Mike,
>
>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
>
>"mike" wrote:
>
>> Gracias Por Tu Respuesta Maxi.
>> en Cada linea o Registro de la Tabla Principal o
Fuente.
>> Existen Datos en Codigos cada uno de los Cuales segun
su
>> Valor puede Tener diferentes Significados. Tambien
puede
>> haber una Cadena con Los Apellidos y Nombres seguidos
por
>> lo que debemos usar SUBSTRING, y asi de toda la
Cadena,
>> se extrae informacion que luego de "procesada" va bien
a
>> la Tabla Secundaria 1 o Tabla Secundaria 2.
>>
>> Espero su amable ayuda
>> >Hola Mike, claro que puedes, es mas usar cursores es
una
>> muy mala idea en
>> >sqlserver y viene muy bien tu comentario :-)
>> >
>> >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" escribió en el mensaje
>> >news:089501c53b00$d8c1b760$
>> >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.
>> >
>> >
>> >
>> >
>> >
>> >.
>> >
>>
>.
>

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida