Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cool Cursores para Actualizar - SQL Server

Hola a todos

Tengo un Trigger en el evento de eliminación para una tabla en especial... entonces lo que me hace el trigger es actualizar un dato en otra tabla...

esto me funciona bien siempre que se elimine un dato.. pero al eliminar más de un dato solo me realiza la actualización en el último dato eliminado... por lo cual me veo en la obligación de trabajar con cursores.. me acuerdo haber creado uno para inserciones masivas.. pero no se si se tratan igual para las actualizaciones...

Código SQL [-]
CREATE  TRIGGER TRIGG_DETALLE_BO ON [dbo].[Detalle] 
FOR DELETE
AS
begin  
     Declare @Abo_Codigo Int
     Select @Abo_Codigo = Abo_Codigo From Deleted

     Update Abono Set Abo_Estado='D'
     Where Abono.Abo_Codigo = @Abo_Codigo
end

bueno el anterior trigger me realiza eso.. pero como seria con un Cursor ??

Salu2
__________________
BlueSteel
Responder Con Cita
  #2  
Antiguo 22-04-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
en oracle, se añade en la definición del triger que debe disparar para cada fila afectada por la operación. En interbase no existe eso?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 23-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Ok... pero como seria ???

Cita:
Empezado por poliburro Ver Mensaje
En interbase no existe eso?
quien dijo interbase

Salu2
__________________
BlueSteel
Responder Con Cita
  #4  
Antiguo 23-04-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por BlueSteel Ver Mensaje
Ok... pero como seria ???


quien dijo interbase
jajaj perdón amigo, no se por que entendí interbase :P. Esta es la definición de un triger en oracle que se dispara por cada fila afectada en una operación.

Código SQL [-]

create or replace TRIGGER TRGADM_TDETREGABONOS_AFT
AFTER INSERT ON ADM_TREGABONOS 
REFERENCING OLD AS Viejos NEW AS Nuevos  FOR EACH ROW


Por cierto que versión de sql server utilizas?
__________________
Conoce mi blog http://www.edgartec.com

Última edición por poliburro fecha: 23-04-2008 a las 03:32:36. Razón: error
Responder Con Cita
  #5  
Antiguo 23-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Cursores

Amigo Bluesteel, el uso de cursores es un tema muy debatido en los foros referentes a SQL Server, ya que en la opinión de la mayoria no se debe hacer uso excesivo de estos por la disminución del performance del Servidor, pero eso es tema para la sección de debates. Existen 2 soluciones a tu problema

1. Sin cursores

Código SQL [-]
    UPDATE T
    SET T.Abo_Estado='D'
    FROM Abono T
    JOIN Deleted D ON T.Abo_Codigo=D.Abo_Codigo
2. Con cursores

Código SQL [-]
 Declare @Abo_Codigo Int
 Declare MiCursor Cursor For 
    Select Abo_Codigo From Deleted
 Open MiCursor
 Fetch Next From MiCursor into @Abo_Codigo
 while @@Fetch_Status = 0
 begin
   Update Abono
   Set Abo_Estado='D'
   Where Abono.Abo_Codigo = @Abo_Codigo
   Fetch Next From MiCursor into @Abo_Codigo
 end
 Close MiCursor
 Deallocate MiCursor

Espero que te sirva. Saludos
Responder Con Cita
  #6  
Antiguo 23-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cool

Cita:
Empezado por jcarteagaf Ver Mensaje
Amigo Bluesteel, el uso de cursores es un tema muy debatido en los foros referentes a SQL Server, ya que en la opinión de la mayoria no se debe hacer uso excesivo de estos por la disminución del performance del Servidor, pero eso es tema para la sección de debates. Existen 2 soluciones a tu problema
Ok.. gracias... lo tendre en consideración... pero para esta ocación los usaré ya que no serán más de 9000 registros los que existen en la tabla.. y de esos cuando realizo una actualización siempre son de 2 a 5 registros a la vez....

por lo visto son pocos y la base tambien es pequeña..así que no se verá afectado el rendimiento...

Salu2
__________________
BlueSteel
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
"Como Actualizar tablas de SQL Server en delphi!!" SilviaM MS SQL Server 7 17-10-2007 22:44:45
dbgrid para actualizar speter SQL 3 21-08-2007 21:12:20
Por que da otros resultados un Sp de sql server usando cursores alexander66 MS SQL Server 3 29-08-2006 15:15:26
Actualizar automaticamente los datos en SQL Server manuel Suarez MS SQL Server 1 07-06-2005 09:46:28
Ms Word 2000/97 + Ms sql server 7/2000 + almacenar - leer - actualizar Campos jcp_nqn Servers 0 21-12-2003 01:55:14


La franja horaria es GMT +2. Ahora son las 11:49:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi