| ||||
Respuesta: cantidad de registros de un cursor?? iislas, un cursor para mi es lo q es para todos: "Un cursor es una variable que nos permite recorrer con un conjunto de resultados obtenido a través de una sentencia SELECT fila a fila...." REF: devjoker.com el punto aca no es la semantica de un cursor, sino q pregunto, si hay alguna forma de saber cuantos registros me devuelve un cursor??....no nos desviemos por favor....saludos
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| |||
Respuesta: cantidad de registros de un cursor?? Entonces de acuerdo a tu definición puedes recorrer el conjunto para saber cuentas registros hay. No hay manera de saber de manera "directa" cuantos registros tiene el cursor, puedes hacer un count sobre el mismo select sí deseas saber la cantidad de registros. Saludos. |
| ||||
Respuesta: cantidad de registros de un cursor?? pense q tal vez habia una funcion o variable q me devolvia la cantidad de registros de un cursor, asi como la funcion @@FETCH_STATUS nos indica el estado de la última instrucción FETCH emitida de un cursor, pero bueno aparentemente solo queda hacer el count dentro del cursor.... gracias, saludos...
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? no se puede usar esa variable en un cursor, solo queda hacer un conteo dentro del cursor....gracias
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? se q hay q evitarlos, pero a veces son necesario iislas.... caso contrario tendrias q programar bucles en tu aplicacion, y hacer multiples conexiones a tu bd, cosa q me parece menos rapido q hacerlo con cursores en un procedimiento almacenado saludos...
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? Totalmente de acuerdo.. tambien trato de evitar los cursores. Solo comentario (y basado en mi experiencia) las operaciones de buqles son mucho mas rapidas en el front ya que manejas lenguajes imperativos (les dices exatamente como hacer las cosas) al contrario de tsql que es un lenguaje declarativo (le dices que hacer y el motor de sql decide como hacerlo). De lado del front (dependiendo de la plataforma y el lenguaje utilizado) puedes optimizar tus consultas para trabajar de modo desconectado y reciclar conexiones. Yo prefiero siempre el front cuando tengo procesos que hacen uso intensivo de calculos y el back cuando se trata de movimientos masivos de informacion. Claro que cada quien hace lo que mejor le funciona... Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura... -- MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications. |
| ||||
Respuesta: cantidad de registros de un cursor?? estimado iislas, sin usar cursores, como se podria recorrer fila a fila los resultados de un select ??? y pudiendo disponer de los valores (de campos) q devuelve cada fila del select ? si posteas codigo, te agradeceria mucho....saludos
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? gabrielflowers, SQL Server (como muchos otros motores de bases de datos relacionales) son muy "torpes" para recorrer "registro x registro", no fueron creados para eso. Son excelentes motores para poder manipular GRANDES cantidades de datos. Insisto, los que estamos en el grupo "anti-cursores" decimos que casi todo lo que se hace con un cursor, se puede hacer con un simple T-SQL, sin "noquear" al servidor |
| ||||
Respuesta: cantidad de registros de un cursor?? ok iislas, estamos de acuerdo en q debemos evitar los cursores, pero aun no has respondido mi pregunta: "...sin usar cursores, como se podria recorrer fila a fila los resultados de un select ??? y pudiendo disponer de los valores (de campos) q devuelve cada fila del select ?" Cita: El 100% de los procesos ejecutados mediante CURSORES, se pueden hacer por T-SQL Cita: ...casi todo lo que se hace con un cursor, se puede hacer con un simple T-SQL, sin "noquear" al servidor
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? Cita: Recorrer las filas una por una es una estrategia (el cursor la herramienta) pero existen otras estrategias que puedes aplicar para obtener el resultado que requieres.... Si lo deseas puedes exponer tu problema o escenario, y sera mas facil que te propongan alguna estrategia alternativa para la solucion de tu problema... Eso difiere de solicitar una herramienta diferente para la misma estrategia de solucion... Pero si lo que necesitas es usar cursores, puedes encontrar toda la referencia y codigo de ejemplo en la ayuda de sql server... DECLARE CURSOR (Transact-SQL) Espero te sea de utilidad... Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura... -- MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications. |
| ||||
Respuesta: cantidad de registros de un cursor?? estimado andres, eres muy gentil con tus comentarios, mas lo q yo necesito hacer en este momento es recorrer las filas de un select como dije, y manipular los valores de campos devueltos por el select, a manera de un bucle para que con estos datos y previo procesamiento llenar otras tablas...., se q otra alternativa era hacerlo programando en un lenguaje especifico: c#, vb.net, etc pero me incline por cursores ....hasta el momento todos son se declaran anticursores aca pero no me dicen de q otra manera puedo recorrer un select con transact-sql ????? y gracias por el link, lo revisare, aunque mi duda no era sobre como se programan los cursores, pero igual gracias....saludos
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? (mi ultimo comentario) Si un cliente entra a una farmacia y dice, "me da un par de aspirinas, ya que me dicen que tomandome 2 antes de tener sexo, no embarazo a mi chica" y el dependiente le explica que hay otros metodos para el NO-EMBARAZO y el cliente insiste en que ese metodo es el que a el le gusta, pues ¿que se puede hacer? En tu caso, quieres recorrer REGISTRO A REGISTRO y hacer operaciones con cada registros y enviarlas a otra tabla. Bueno, pues usa los cursores, si eso es lo que tu quieres. |
| ||||
Respuesta: cantidad de registros de un cursor?? estimado iislas sin exaltar los animos, insisto esta bien entiendo q se deben evitar los cursores, pero entonces dame otra alternativa q se pueda hacer con T-SQL como dijiste.... Cita: agradezco tus recomendaciones, si me das esta respuesta q busco te agradeceria mucho, saludos. ...sin usar cursores, con T-SQL como se podria recorrer fila a fila los resultados de un select ??? y pudiendo manipular los valores (de campos) q devuelve cada fila del select para poder alimentar otra tabla???
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? Okay, otra alternativa para recorer los registros en insertarlos en una temporal que tenga un identity y por medio de el ir leyendo los campos en variables, registro por registro, incluso podrias consultar la variable @@rowcount al insertar para saber cuantos hay sin hacer la cuenta a la temporal. Esto seria menos pesado ya que no consumirias menos recursos, pero aun asi seria mas tardado que hacerlo de forma masiva... Suerte con tu desarrollo.. Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura... -- MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications. |
| ||||
Respuesta: cantidad de registros de un cursor?? andres gracias por tu aporte, pero el procesamiento de mis registros devueltos por el cursor es mucho muy complejo, tanto q es necesario la programacion de condicionales, etc, no creo q se pueda hacer el procesamiento de forma masiva como sugieres es decir aunque lo pase a una tabla temporal como sugieres, igual necesito recorrer mis datos fila por fila, y en base a reglas de negocio ir leyendo de otras tablas, para en conjunto y luego de un procesamiento insertar estos datos en otra tabla, no se si me dejo entender lo q estoy desarrollando es algo complejo de explicar, pero requiere programacion y recorrer fila a fila los registros de un select, como dije ....insisto hasta el momento no me dan alternativas para no usar cursores y poder recorrer fila a fila los datos devueltos por un select.... pero gracias por sus aportes, y sugerencias, saludos...
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? Okay de acuerdo contigo... hay casos muy muy complejos en los que no hay mas alternativas... afortunadamente no me he topado con uno de ellos asi que siempre he podido evitarlos.. En vista del exito no obtenido... suerte con tu proceso (no mas comentarios). Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura... -- MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications. |
| ||||
Respuesta: cantidad de registros de un cursor?? ..............
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." Última edición por gabrielflowers; 18/12/2009 a las 06:30 |
| ||||
Respuesta: cantidad de registros de un cursor?? Hola encontre una forma aparente de sustituir mi cursor:
Código:
estimado iislas tu expusiste esto?, esta es la alternativa de la que hablas para no usar cursores?, de ser asi parece interesante, habria q ver cuando optimo resulta esto, y tengo una duda en el select dentro del while esta recuperando varias filas, y no solo una fila podria explicar esto del while....Bueno, alguna vez vi en un articulo que para substituir cursores en 2005 se recomienda CTE's, pero para 2000, tablas temporales. SELECT * INTO #TEMPORAL FROM TUTABLA........................... WHILE EXITS (SELECT CampoIndice FROM #TEMPORAL) BEGIN SELECT (ASIGNO VARIABLES) FROM #TEMPORAL EXEC PROCEDIMIENTO @VARIABLES DELETE #TEMPORAL WHERE CampoIndice = @CampoIndice CONTINUE END -- Saludos IIslas http://www.eggheadcafe.com/software/aspnet/32951387/sugerencia-para-no-usar-c.aspx saludos,
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? Si, lo expuse Es una especie de Pseudo-codigo, si ves el SELECT, se asume que debe haber un WHERE, ya que se debe tomar el valor de @CampoIndice, para ir "recorriendo" los registros de tu tabla temporal. Pero para cada caso, se pueden exponer varias opiniones. Lo que no me gusta de tu exposicion, es que te aferras en decir, "Quiero recorrer unos registros, hacer unas operaciones (¿?) y mandarlas a otra tabla" Te pregunta uno: "Explica que tipo de operaciones" "Quiero recorrer............" y de ahi no te mueves... |
| ||||
Respuesta: cantidad de registros de un cursor?? hola iislas, gracias por responder, sobre el proceso q yo hago es bien complejo, y temo tambien no hacerme entender bien al querer explicarlo, pero como dije anteriormente necesito recorrer fila a fila los valores de campos de un select, para posteriormente procesar esa informacion, e ir leyendo de otras tablas para alimentar a otra tabla despues de un procesamiento de todos estos datos, la idea es algo asi. sobre tu explicacion veo este pedazo de codigo: Cita: y veo que estas asignando a variables los valores devueltos por el select, mas sin embargo este select es un conjunto de datos y no una fila especifica, hummm, como q le falta algo ahi, quizas sea el "TOP 1", es decir q el select solo agarre la primera fila encontrada, no crees??? que opinas?.... WHILE EXITS (SELECT CampoIndice FROM #TEMPORAL) BEGIN SELECT (ASIGNO VARIABLES) FROM #TEMPORAL aun a pesar de ello tengo mis dudas, pues estas haciendo 1 select a la tabla en el while, y N-select dependiendo de la cantidad de filas dentro del while, ademas luego haces los mismos N-Delete .... veo estas cosas y creo q es solo un pseudo-cursor, o tal vez un emulador de cursor, sin faltar el respeto a nadie ahora habria que ver cual se ejecuta en menos tiempo, y cual es el mas optimo, habria q hacer pruebas para ver si este codigo expuesto por ti es mucho mas efectivo q usar cursores... gracias por leerme saludos.
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? iislas, sin exaltar los animos nunca hice referencia a pseudo-codigo, sino q dije q lo q sugieres es algo q emula un cursor, y hace bastantes lecturas y deletes......para el caso habria q comparar cual se ejecuta mas rapido si con cursor o de la forma q sugieres sobre lo q te pregunte aun no me respondiste: Cita: sobre tu explicacion veo este pedazo de codigo: Cita: .... WHILE EXITS (SELECT CampoIndice FROM #TEMPORAL) BEGIN SELECT (ASIGNO VARIABLES) FROM #TEMPORAL y veo que estas asignando a variables los valores devueltos por el select, mas sin embargo este select es un conjunto de datos y no una fila especifica, hummm, como q le falta algo ahi, quizas sea el "TOP 1", es decir q el select solo agarre la primera fila encontrada, no crees??? que opinas?
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? Al no conocer tu proceso, me declaro incompetente para darte una explicacion a lo que deseas hacer. Si lo que quieres es RECORRER REGISTRO POR REGISTRO una tabla o un select, adelante, sigue con tus cursores. La adivinanza, nunca ha sido mi fuerte. |
| ||||
Respuesta: cantidad de registros de un cursor?? solo pedi q me aclares eso del while: Cita: y no q adivinaras el proceso q estoy haciendo, saludos sobre tu explicacion veo este pedazo de codigo: Cita: .... WHILE EXITS (SELECT CampoIndice FROM #TEMPORAL) BEGIN SELECT (ASIGNO VARIABLES) FROM #TEMPORAL y veo que estas asignando a variables los valores devueltos por el select, mas sin embargo este select es un conjunto de datos y no una fila especifica, hummm, como q le falta algo ahi, quizas sea el "TOP 1", es decir q el select solo agarre la primera fila encontrada, no crees??? que opinas?
__________________ "puedo detenerme, pero no retroceder, tengo que avanzar..." |
| ||||
Respuesta: cantidad de registros de un cursor?? /* DECLARE @CampoIndice INT DECLARE @Cliente INT DECLARE @Saldo INT SELECT * INTO #TEMPORAL FROM CLIENTE WHERE SALDO > 1000 WHILE EXISTS (SELECT IDReg FROM #TEMPORAL) BEGIN SELECT TOP 1 @CampoIndice = IDReg, @Cliente = ClienteID, @Saldo = Saldo FROM #TEMPORAL EXEC usp_NotificaSaldo @Cliente, @Saldo DELETE #TEMPORAL WHERE IDReg = @CampoIndice CONTINUE END */ |