Editorial
Cursores en SQL Server
Los cursores son una herramienta de SQL que nos permite recorrer el resultado de una consulta SQL y realizar operaciones en cada paso de ésta.
Es así como nos ayuda a realizar operaciones que de otro modo serían más complejas o irrealizables. A continuación coloco el código de un cursor muy simple para el Analizador de Consultas de SQL Server.
/* Este cursor deja las contraseñas iguales al nombre de usuario. La tabla Cliente tiene estos tres campos: CliCod, CliUser, CliPass */ -- declaramos las variables declare @cod as int declare @user as varchar(50) declare @pass as varchar(50) -- declaramos un cursor llamado "CURSORITO". El select debe contener sólo los campos a utilizar.
declare CURSORITO cursor for select CliCod, CliUser, CliPass from Cliente open CURSORITO -- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro fetch next from CURSORITO into @cod, @user, @pass while @@fetch_status = 0 begin update Cliente set CliPass= @user where CliCod=@cod -- Avanzamos otro registro fetch next from CURSORITO into @cod, @rut, @nombres end -- cerramos el cursor close CURSORITO deallocate CURSORITO
Solo que, segun entiendo, la recomendacion de MS para SQL Server es usar tablas temporales u otras tecnicas en lugar de cursores. Algun comentario?
Los cursores en Sql server son lentos y si son recursivos sin comentarios…
si, en cuanto a rendimiento siempre sera mejor usar tablas temporales, aun que hay ocasiones que son imprescindibles, lo mejor es tratar de minimizar la cantidad de acciones que tomemos con el cursor, y lo que es mas, el select que utilizemos para el cursor, debera traer los registros exactos que necesitemos, y no luego filtrar el resultado obtenido en el cursor
hay muy buenos comentarios,por gurus de sql (en español) en este site
http://www.portalsql.com
Saludos
Cuando es conveniente usar cursores y cuando tablas temporales ?
Quiza las aplicaciones que he hecho no son tan complicadas como para pensar en eso, pero me gustaria saber.
Muchas gracias
Creo que nunca es conveniente usar cursores a no ser que necesariamente tengas que recorrer los registros uno a uno y hacer operaciones.
En General siempre se puede actualizar las tablas temporales con actualizaciones masivas de datos. Con o sin tablas #temp_
Los cursores son un retorno al dbf, donde todo se hacía recorriendo registro a registro, pero en esa época no había otra opción.
Particularmente creo que el uso de cursores simplifica la solución de un problema, pero complica el código haciéndolo legible solo para el que lo hizo.
Si se decide quemar alguna neurona más, se podrá encontrar una opción que solucione el problema sin el uso de cursores. De eso estoy seguro, pero siempre habrá por allí gente que piense que cuanto más complicado programe, más tiempo durará en su trabajo. Claro que ninguno de nosotros nos identificamos con esta gente. ¿No?
Una pregunta para uds que parece que entienden bastante este tema de los cursores.
En mi laburo tenemos un sistema a medida hecho en clarion el cual ultimamente se cierra en los clientes con un error gpf, varias veces por dia.
viendo un trace del profiler descubri que aparecian frecuentemente exceptions en classevent tales como: Error: 1933, Severity: 16, State: 1
Error: 16954, Severity: 10, State: 1
Error: 213, Severity: 16, State: 7
Error: 1934, Severity: 16, State: 1
Error: 245, Severity: 16, State: 1
y estos aparecen casi siempre luego de un rpc:completed relacionado con cursores
exec sp_cursorclose 180152853 o
exec sp_cursorfetch 180152853, 2, 1, 20 o
exec sp_cursorunprepare 7167
Estos cierres del sistema se pueden deber a este uso de cursores ??
Es dificil para mi verificar si es un problema de programacion(no tengo el fuente) o un problema de las memos(hard) de los clientes ?
Hay en algun lugar informacion de los problemas que pueden surgir de la utilizacion de los cursores?
gracias
Hay que saber cuando usar y no usar cursores. Estos son muy utiles para cierto tipo de operaciones sobre todo en un sistema transaccional, y el uso indiscriminado de tablas temporales puede dar un rendimiento muy pobre a la aplicación (http://www.programacion.net/bbdd/articulo/man_tablastemp/). Me ha tocado ver aplicaciones donde el uso de tablas temporales a provocado que las aplicaciones respondan muy pobremente. También hay que ver que cosas procesar en el servidor y que en el cliente, un error muy comun que hacen las personas que programan en visual basic y que están acostumbradas a hacer todo el procesamiento en el lado del cliente, inclusive no aprovechando la integridad referencial que el mismo manejador de base de datos maneja.
salu2.
para los que vuelven a leer esto, o ingresen nuevamente, ahora que he visto este articulo de nuevo caigo en un error en el codigo que no identifique antes…
declare @cod as int
declare @user as varchar(50)
declare @pass as varchar(50)
esto deberia estar asi:
declare @cod as int, @user as varchar(50), @pass as varchar(50)
es decir en un solo declare, ya que es mas optimo para el sql server (segun la ayuda misma).
asi que pueden aprovechar este pequeño tip para optimizar sus querys y sp donde hagan uso del declare en varias lineas.
tambien prefieran las funciones definidas por el usuario ante los procedures 😀
son mas optimas 😀
Ese ejemplo es una verguenza que clases de Ing. Informatico sos ???
Los cursores son buenos cuando estamos hablando de menos de 300 registros, las tablas temporales seria la mejor opción, pero si sabemos que la tabal temporal podria tener unos 1000 registros mejor utilecemos una variable de tipo table en lugar de la tabla temporal que se crea en el disco en la bd de Tempdb
Todo esto es una mierda,aprenda a programar bien para que no usen esa basura de cursores
tigueres eso no deja efectivo aprendan a manejar softwares que dejen dinero
quiero saber sobre analizador de consultas y como puedo crear una base de datos en ella. [email protected]
En ocasiones hay que medir cual es la mejor opción de hacer las cosas. Justo ahora tengo dos opciones para cumplir un requerimiento de un sistema que estoy haciendo: Hacer los cálculos desde la BD usando cursores (ugh!) o hacer los cálculos desde la aplicación con muchisimos querys volando por aqui y por allá a través de la internet!!!
Pues si, los cursores deben ser la _última_ opción para cualquiera.
// http://stvmty.no-ip.info/ //
¿Qué eso es lo poco que pueden publicar y encima piden que lo valore?
-Falta mas acerca de cursores
En el mundo de las bases de datos es muy común la utilización de tablas temporales. A pesar de que todo el mundo sabe que este tipo de estructuras ralentizan el funcionamiento de nuestras consultas, los programadores no pueden evitar recurrir a ellas porque muchas veces facilitan la resolución de problemas. Almacenar datos para usarlos posteriormente, guardar resultados parciales, analizar grandes cantidades de filas. Hay muchos casos en los que podemos necesitar estas tablas temporales, ¡Pero hay que utilizarlas correctamente!
Tomado de: http://www.programacion.com/bbdd/articulo/man_tablastemp/
Prefiero las cosas sencillas y sin complicaciones…pero pues cada quien programa como quiere !!!
Saludos a todos
HOLA A TODOS, quiero saber como hago para borrar campos,todos los fin de mes, y se abran a las 01:00 AM del primer dia del mes siguiente.
Gracias
HOLA A TODOS, quiero saber como hago para borrar campos,todos los fin de mes, y se abran a las 01:00 AM del primer dia del mes siguiente.
Gracias
Una consulta:
Tengo que realizar la inserción de todo un select en otra tabla(historica) agregando algun dato adicional, la preguna es:
-¿Es mas eficiente realizar una o dos consultas para obtener los datos y que mi aplicación realice los calculos, para despues insertarlos en la base de datos?
– ¿Es eficiente hacerlo con cursores?
– Cual de las dos opciones brinda mayor velocidad? En una red de área local.
Y vos que clase de Ing. sos?, mejor ofrece una buena solucion para lo que aqui se pregunta y se discute…
Necesito poder detener el bucle del cursor… aqui hemos desarrallo una migracion de datos diaria en lotes… lo que ocurre es que lo realiza bien, pero cuando llega al ultimo dato sigue regresando con el mismo valor indefinidamente… se ve que el
while @@fetch_status = 0
NO LO PUEDE DETENER!!!
salu2
bueno me parecio bueno el tuto aprendi un poco..y bueno algunas cosas que nada mas no entendia alli aprendi…gracias y suerte a todos….
Es mas eficiente que hagas un
INSERT INTO
SELECT
este tema es buenisimo
…me gustaria me dijeran cual es el objetivo o ventaja principal de usar cursores , de esta forma me quedaria claro cuando debo y cuando no debo usarlos.
nesecitamos hacer una uelga global para que el mundo comprenda que tan importante somos nosotros y aprendan a valorar los sistemas y nos paguen como es debido.
// http://seminarioutp.serverhttp.org/ // //
hasta cuando cursores por dios , ahora seguro quieren programar en basic, cambien el paradigma
Quiero te ner un cursor pero el mismo cursor no quiero otro diferente
no encontre lo que andaba buscando
Los Cursores son una mierda complican el laburo.
tengo una aplicación en VB 6 pero
todo está hecho con Store Procedure con Cursores.
Parecen que la gente que laburo antes no sabían trabajar en equipo.
es super básica la explicación pero sirve de todas formas.
Buenoooo, la verdad es que con cursores se abre un abanico de posibilidades, de que hacer con cada linea de una tabla, que con otras sentencias sql no se puede hacer por ello de su existencia hasta ahora, asi que doy un voto por a los cursores, y para los que preguntan de como hacer que a cierta hora y fecha se haga algo el equipo relacionado con la base de datos, pues genera la aplicacion que elimine los datos o agregue datos aqui uno hace lo que desee con su aplicacion generas tu ejecutable, luego en el programador de tarea asigna una tarea de que cada fin de mes a la hora que necesite se ejecute esa aplicacion como ejemplo (miaplicacion.exe) y listo, y tambien recordaros que con procedimientos almacenados que ya estan compilados en el mismo servidor de base de datos las sentencias son mas rapidas que escribir las sentencias en el programa, y para el amigo que necesita saber si con una o dos consultas pues con una sola anidada asigna el insert de una seleccion que ya trae el calculo en la misma sentencia.
Atte. Luis
Muchos comentarios hasta con tintes racistas hacia los cursores no?…
Es Simple.. No uses Cursores ni Tablas temporales…
Claro q hay muchos casos q no puedes hacer otra cosa mas q emplear alguno de estos recursos, pero el error radica en inmediatamente pensar en un cursor, el 80% de las cosas que se hacen con cursores se pueden hacer usando bien subquerys…
o estoy mal?..
Saludos…
Existe alguna forma de definir la cadencia de un cursor, es decir, cada cuanto tiempo va de un paso a otro?
Como meterle una pausa o algo asi…
Una forma de evitar los cursores es la utililización de Sub Consultas asi no se tiene que procesar mediante un cursor. o utilizar variables de tipo table para que sea mas rapido el proceso de recorrer el cursor para evitar que la tabla(s) se bloqueen
HOLA AMIGOS ESTOY HACIENDO UN PEQUEÑO SISTEMA DE PRESTAMO DE EQUIPOS AUDIOVISUALES NECESITO SU AYUDA. EL PROBLEMA ES EL SIGUIENTE TENGO UNA TABLA PRESTAMOS DONDE TENGO LOS CAMPOS NOMBREEQUIPO, FECHAUSO,HORAUSO,FECHAFINAL,HORAFINAL. EL CHISTE ES NO SE PERMITA QUE SI UN EQUIPO YA ESTA RESERVADO A LA HORA INDICA Y FECHA NO PERMITA QUE SE PUEDA RESERVAR Y QUE VERIFIQUE LAS HORAS Y FECHAS DISPONIBLES.. NO SE SI ME EXPLIQUE
PUEDES TRABAJARLO CON UN ESTADO DENTRO DE LA MISMA TABLA, EL CUAL T INDICARA SI EL EQUIPO ESTA RESERVADO O YA ESTA EN PRESTAMO
Yo de nuevo cai en este articulo pedorr, qiuero saber cual es la limitacion de los cursores y uds pelotudean
que webean argentinos culiaos
con respecto a la pregunta de Paz debes crear una tarea en SQL que sea una vez al mes e indicandole la hora de ejecución de tu procedimiento.
COMO PUEDO CAMBIAR UN REGISTRO SI EL CAMPO ES ES PRIMARIO EJM: SI EL RANGO ESTA DE (761-1114) AL (1-105)
LO HE INTENTADO CON EL UPDATE
Pues a mi si me sirvió el artículo publicado creo que al menos deja claro cual es el papel del cursor y me resolvió mis dudas creo que si tan buenos son deberían de poner el equivalente del ejemplo del artículo pero sin usar cursores no creen, esto es para los expertos en sql saludos
Yo no soy ningún experto, pero el cursor de arriba podría reeplazarse por:
UPDATE CLIENTES SET CLIPASS = CLIUSER FROM CLIENTES
si se quisiera poner alguna condicion podría ponerse una clausula where …
entiendo q el cursor segun lo q se comenta en el articulo, se parece como una lista enlasada, donde solo tienes acceso a un registro a la vez, su facilidad de consultarlo. Ummm pq le pusiseron nombre CURSOR???
Toda esta discusión es una tontería. Es como discutir si solo alcanza con el cuchillo para comer y dejamos de usar el tenedor…
La experiencia les dirá cuando conviene usar una herramienta u otra. Yo les digo que si las tablas tienen millones de registros, el hacer un UPDATE es suicida porque tarda horas y mientras tanto, la tabla bloqueada… Ahí los cursores permiten partir la operación en muchos pequeños bloques que permiten al resto de los usuarios seguir trabajando.
[…] Más sobre cursores en SQL Server […]
como puedo llamar de sql a visual basic.net?????
Se puso buena la discusión de los cursores. mas q el contenido del articulo en sí.
Sí, sí… Los cursores no son muy eficaces q digamos, al igual que las subconsultas, y si hablamos de cursores mezclados con subconsultas la cosa esta bien jodida.
Saludos!
me podrian ayudar con algo, es que tengo que hacer un procedimiento que sea recursivo pero cuando le meto los cursores, cada vez que hace la recursividad me sale error de que el cursor ya esta abierto, la idea es que el procedimiento me lea un arbol de arriba a abajo y que me de los descendientes de un nodo.
Sandra, haceme acordar que no te deje tocar mi servidor de base de datos… Es que usar cursores recursivos… espero que no sea grande la Base.
En cuanto al Update, es mucho más rápido que usar cursores, y si haces update a toda la tabla deberá demorarse lo necesario, aunque no necesariamente tenes que hacerlo sobre toda la tabla, pero es la opción más rápida. Además deberán cuidar los índices de las tablas que se esten leyendo para hacer el update.
Un mensaje para el usuario JULS
Es un grosero y descortes. Deja que cada quien exprese lo que conoce. Tu decides si lo usas o no.
Voto por no usar nada que no sean consultas o subconsultas, sin embargo he tenido que generar reporte generenciales complejos y utilizo los recursos en el siguiente oden prioridad: variables de tablas, cursores y por ultimo tablas temporales fijas, nada ##temp, trabajo para una trasnacional donde el uso de dbTemp por parte de una ##temp hay que pagarlo a parte. Y los cursores son realmente rapidos, la lentitud en ellos radica generalmente en las operaciones que se hacen por cada linea de ejecución, sin embargo para SQL Server 2000 existe un bug que ocurre cuendo corremos un cursor sobre una variable de tabla, donde el servidor se queda sin hacer nada y consumiendo memoria al rededor de 15 mins.
Y por ultimo alguien pidio la mas simple que los cursores existe, se conoce como cursores no estandar o clausula FOR, esta presente en servidores como Interbase/Firebird, Postgre entre otros
SI ALGUIEN ME PODRIA AYUDAR EN ESTE PROBLEMA:
TENGO UN CURSOR, PERO EN CIERTA CONDICION NECESITO SALIRME DEL CURSOR PORQUE YA NO NECESITO QUE RECORRA TODO EL CURSOR.
cOMO PUEDO HACER?
CALLESE PUTO HOYGAN!
Graicias
soy un novato en la BD’s pero a pero a pesar de todo pude aprender un poco de ustedes gracias. (Salas “UAIM”)
Respecto al uso de cursores me parece bien tener cada fila en detalle, porque puedo manipularlo de una mejor forma, pero cuando en la BD existe muchos registros, manejarlo a detalle ya se complica… como dijeron muchos hay que ver cuando usar cursores y cuando no…
PAZ
Tienes que crear una Tarea en la parte de MANAGEMENT de SQL Server y activar el SQL Server Agent para que este pueda ejecutar las tareas a la hora que necesitas que pase.
————–
“Quiero saber como hago para borrar campos,todos los fin de mes, y se abran a las 01:00 AM del primer dia del mes siguiente.”
Por lo que veo aquí hay mucha gente que le vale un pepino como hacer las cosas, por ese tipo de gente he tenido muchos problemas cuando hago reingenieria de procesos para bases de datos y código duro.
Ojalá aprendieran a optimizar sus desarrollos y dejar que ciertas acciones las realice el servidor y ciertas acciones el cliente.
Si no saben lo que es programar en CAPAS entonces realmente están haciendo trabajo que sus empresas NO deberian pagar y generando problemas a desarrolladores y consultores que realmente optamos por aprovechar todos los recursos de ambas partes (Cliente-Servidor).
Saludos.
Por lo que veo aquí hay mucha gente que le vale un pepino como hacer las cosas, por ese tipo de gente he tenido muchos problemas cuando hago reingenieria de procesos para bases de datos y código duro.
Ojalá aprendieran a optimizar sus desarrollos y dejar que ciertas acciones las realice el servidor y ciertas acciones el cliente.
Si no saben lo que es programar en CAPAS entonces realmente están haciendo trabajo que sus empresas NO deberian pagar y generando problemas a desarrolladores y consultores que realmente optamos por aprovechar todos los recursos de ambas partes (Cliente-Servidor).
Saludos.
JAMES
El problema NO consiste en SQL Server, la cosa está en la capa de Negocio que es cuando extrae la información de la capa de Base de datos (Conexion) y tú decides si sólo lo muestras como Lectura o envias un mensaje en el que le digas al usuario que ya está reservado.
————–
HOLA AMIGOS ESTOY HACIENDO UN PEQUEÑO SISTEMA DE PRESTAMO DE EQUIPOS AUDIOVISUALES NECESITO SU AYUDA. EL PROBLEMA ES EL SIGUIENTE TENGO UNA TABLA PRESTAMOS DONDE TENGO LOS CAMPOS NOMBREEQUIPO, FECHAUSO, HORAUSO, FECHAFINAL, HORAFINAL. EL CHISTE ES NO SE PERMITA QUE SI UN EQUIPO YA ESTA RESERVADO A LA HORA INDICA Y FECHA NO PERMITA QUE SE PUEDA RESERVAR Y QUE VERIFIQUE LAS HORAS Y FECHAS DISPONIBLES.. NO SE SI ME EXPLIQUE.
Amigos… se que los cursores son muy malos.. y por eso tengo una consulta, tengo que hacer un insert de una consulta algo complicada que ya he resuelto en 99%, pero tengo un campo correlativo que se calcula, y ademas de sebe incrementar en una tabla de variables que tengo, para hacerlo corto es algo como Select crr from tx luego update crr + 1, solo que es varchar lo que lo vuelve complicado y nos se puede solo sumar, sino sacar cuantas con el mes, dia, unas letras y al final un numero, si inserto 3 registros deberia ser (ej) el primero a1, segundo a2, tercero a3, dado que hago un update, no puedo usar una funcion (estoy casi seguro de ello), solo creo que me quedan dos opciones, o cursores, o un select que se lo paso a la aplicacion luego inserto linea por linea y en el sp calcularia cada vez ese correlativo, que recomiendan?
alguien sabe como hacer para obtener la suma de registros mas el valor anterior? me explico
reg1 reg2 saldo
20….30…50
10…-20…40
90….10..140
com ven, el saldo no es el resultado de la suma de reg1+reg2 sin que es reg1+reg2+saldoanterior
pero como calcular el saldo sin usar cursores? (que recien me entero por este articulo) y sin hacerlo en la aplicacion (ejecutable) sino en la bd
Los cursores de sql, es una opcion que hay que usar como ULTIMO RECURSO, cuando realizamos una ddbb para miles de usuarios el resultado de usar cursores es tener una maquina sin recursos para los usuarios despues empezamos a tener bloqueos cada vez frecuentes y por ultimo es: “yo tengo lo que tu quieres y yo tengo lo que tu tienes” solucion que da el server elimina la conexione que tenga menos recursos.
Yo no recomiendo usar cursores nunca (ecepto para muy pocos usuarios o en contadisimas ocasiones).
Un saludo.
ME GUSTARIA SABER LO MISMO QUE PREGUNTA YOYO, TENGO UN SISTEMA DE FUNERARIA Y DESEO AGREGARLE EL SALDO ACTUALIZADO CADA MES A LOS SOCIOS. ADEMAS OTRA COSA, EL CURSOR ME FUNCIONA A LA PERFECCION PERO EN EL MISMO EDITOR DE SQL SEVER. DONDE TENDRIA QUE UTILIZARLO Y CUAL SERIA LA SINTAXIS (SERIA EN UN PROCEDIMIENTO ALMACENADO, EN UNA FUNCION O EN QUE??) MUCHAS GRACIAS
no entendi nada
que son los cursores?
estamos hablando de la conputadora ehh
la verdad no entendi un carajo
perfecto este me ayudo mucho ya que estaba buscando algo paresido para poder hacer un estoreprocedure que me jenerara los clientes cuyo codigos eran primo, y necesitaba llenar un cursor con los codigos.
asi que esto con unas modificasiones me fue de gran ayuda.
gracias….
Muy practico TNX
gracias muy bueno !!!!!
Totalmente de acuerdo, soy de la liga “anti-cursores” y el 99.99% de las cosas que se hacen con un cursor, se hacen con simple T-SQL.
Recordemos que los cursores se crean en memoria, por tanto, degradan la respuesta del servidor, llegano incluso a “tirarlo”
Les cuento una experiencia con el tema. Nosotros manejamos grandes cantidades de datos, en SQL2005 en una maquina paralela de 4 CPUs.
El problema era un requerimiento para chequear valores contradictorios no textuales en ciertos campos, en tablas de mas de 20.000.000 de registros, borrar los afectados e insertarlos en otra tabla. El store procedure original se hizo usando un CURSOR(inocentemente). El proceso tardaba 12 dias en correr.
Luego de un poco de reingenieria se paso a updates e inserts masivos usando variables TABLE y selecciones con WITH. El proceso tarda ahora 6 horas. Eso si, hace falta mucho espacio en disco para que SQL despliegue las tablas temporales para este tipo de updates/inserts masivos. Pero vale la pena.
Es un tema muy interesante, ya que define la velocidad del proceso de datos. Sería bueno poder probar el rendimiento de ambas técnicas en paralelo.
hola. tengo una tabla de Provincias(idProvincia, nombre) otra de viviendas (entre otras cosas idProvincia) los datos los tengo que pasar desde un archivo de excel que trae el nombre de la provincia, no el id.
necesito que al momento de insertar en la tabla provincias sacando los datos del excel me asigne el id y no el nombre.
la unica solucion que encontre fue usando un cursor, pero la idea no me agrada. asi que queria saber si se les ocurria alguna mejor
desde ya mil gracias
Uyyyyyyyy, si que forma de ayudar, asi debe ser para todo en la vida, pero no nos preocupemos que siempre te los encontraras…afortunadamente son la minoria
isaias tu flipas, hay cosas que son imposibles si no usas un cursor
Haber boludos respondanle a yoyo
yoyo
alguien sabe como hacer para obtener la suma de registros mas el valor anterior? me explico
reg1 reg2 saldo
20….30…50
10…-20…40
90….10..140
com ven, el saldo no es el resultado de la suma de reg1+reg2 sin que es reg1+reg2+saldoanterior
pero como calcular el saldo sin usar cursores? (que recien me entero por este articulo) y sin hacerlo en la aplicacion (ejecutable) sino en la bd
sasad
Hola estimados, primero que todo quería felicitarlos por el foro que me ha ayudado bastante a comprender algunos casos SQL, junto a ello os quiero hacer una consulta, que es un tema que estoy viendo hoy en mi laburo..
Resulta que necesito realizar una especie de consulta para posteriormente copiar esos registros y alojarlos en diferentes tablas… me explico??
Explicaré brevemente mi tema:
A diario debo capturar datos de una BD que está en MS Access, para ello ocupo DTS para importar dicha BD y alojarla en SQl Server, una vez que me crea la BD en Sql Server, debo ver la forma de copiar algunos campos y/o registros para llevarlos a mi BD oficial en SQl Server, pero he intentado de muchos modos sin obtener resultados positivos :(. Favor solicito a UDs. ayuda…
Desde ya muchas gracias.
Saludos desde Chile.-
Hagamos un buen uso de nuestro idioma, no solamente de nuestros “talentos” técnicos.
Tienes un mal uso de la palabra “utilizemos”. Se escribe “utilicemos”. Solo usas la letra “Z” cuando escribes la palabra “utilizar”, “utilizamos”, etc.
http://www.wordreference.com/conj/EsVerbs.asp?v=utilizar
Yo creo que rlivon está muy equivocado, yo no veo nada de difícil al utilizar cursores, creo que te falta algo por eso no entiendes el código de otros. Los curssores no complican el codigo de una BD, es algo tan sencillo como utilizar bucles.
Sí, me parece que los cursores consumen muchos recursos y que en la mayoría de casos no conviene utilizarlos, pero hay situaciones en las que no queda otra.
Sin embargo el aporte de Matías es útil para el que no sabe nada del tema, con este contenido pueden conocer una herramienta más, ya verpan ellos si la utilizan o no.
Hola¡¡ pues estoy comenzando a realizar cursores y pues ya me salen, pero tengo una duda, al terminar el cursor aroja el resultado; hay algun comando o función que evite ver el resultado en pantalla ??
Bueno, según leo todos dicen es malo es malo y es malo, pero no dicen cuando bajo que condiciones y porque son malos.
Si realmente son tan malos como se dice, porque siguen disponibles en las nuevas versiones de SQL Server? por ejemplo en SQL Server 2008, tenemos cursores forward_only, fast_forward, etc.
Ahora si son malos no creen que hace mucho que lo habrían suprimido y no optimizado como lo están haciendo actualmente?.
Sabemos que hay cosas que no se pueden realizar solamente con consultas o subconsultas como dicen muchos y es por eso que existen los cursores.
Los cursores son excelentes. Hay que hacerlos con tareas muy minimas, que se destruyan inmediatamente y pasen valores a otros procedimientos. Como FORD, cada uno su tarea simple y hacemos por montones, asi maximizamos el rendimiento.
Se pueden evitar los cursores con T-SQL y SQL Dinamico dentro de un while…. ya lo he trabajado y me da optimos resultados.
Buen dia,
soy unn tanto novato en esto de cuersores y consultas y como leo que usteds tienen conocimientos quiesiera saber si me pueden ayudar.
mi problema es el siguiente:
tengo una tabla la cual tiene cve_alumno,materia,calificacion1,remedial,extra.
el detalle es que tengo que comparar las tres calificaciones y saber cuales la mayor y desplegarla
ejemplo
1001,1,50,70
1001,2,80
1001,3,50,50,80
y tengo que sacar el promedio del alumno tomando solo la calificacion mas alta de la materia, espero que me puedan ayudar.
Hola: se tiene el siguiente caso
articulo serie
A 1111
A 1112
A 1113
B 2221
B 2222
Se desea
articulo CANT_ARTICULO CANT_SERIE
A 1 0
A 1 1
A 1 2
B 2 0
B 2 1
Por favor agradeceria si alguien puede guiarme como sacar ese resultado.
Como puedo correr una tabla registro por registro
(como si fuera un cursor)
Para quienes estamos iniciando el articulo esta muy bueno me ayudo. Para quienes llevan mas tiempo tienen mucha critica yy poco aporte…. sin no aportan mejor no opinen.
Buen articulo.
¿Acaso tu no tienes sentido común que no te das cuenta que ese es un EJEMPLO simple que puede abrir la mente a una idea, o acaso tu necesitas ejemplos complejos y por eso seras un Ingeniero capaz de digerir la información?
Cosas simples puedes transformarlas en cosas complejas, o en tus clases de ingeniería, o en tu experiencia, nunca te topaste con algo asi ? que absurdo y poco competente tu comentario. (Argentinito tenias que ser)
enserio necesito alluda
es para una taeea antes de las 12
por q me dice que subconsulta arroja mas de una fila
en MYSQL
lo traduje en google
Gracias por la explicacion, me sirvio para lo que necesitaba hacer.
Sigan aportando de esta forma que es util para aquellos que no la tenemos tan clara…
Saludos