Club Delphi  
    Paypal   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

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 12-02-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.740
Poder: 26
ContraVeneno Va por buen camino
ya, muy válido tu comentario... así que con algunos cambios y unos retoques aquí y allá, me queda lo siguiente, que me funciona a la perfección:

Código SQL [-]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[triRevisaStatusTipoCambio]    
   ON [dbo].[TipoCambioDep]
   INSTEAD OF INSERT
AS 
BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Declare @Valor int
    Declare @NewStatus Bit
    
    Set @Valor = 0
    
    Select @NewStatus = Status
    From Inserted
    
    Select @Valor = IsNull(Count(*), 0)
    From TipoCambioDep T
    Inner Join Inserted I on T.Departamento = I.Departamento 
    Where T.Status <> 0
    
    If (@Valor >= 1) and (@NewStatus <> 0) Begin    
      Update TipoCambioDep
      Set Status = 0
      From TipoCambioDep T
      Inner Join Inserted I on T.Departamento = I.Departamento 
      Where T.Status <> 0      
    end
    
    Insert into TipoCambioDep(Departamento, TipoCambio, Status)
    Select Departamento, TipoCambio, Status
    From Inserted 

END
-------------------UPDATE -------------------------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER truRevisaStatusTipoCambio    
   ON TipoCambioDep
   INSTEAD OF UPDATE   
AS 
BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    
    DECLARE @OldID INT
    DECLARE @NewID INT
    Declare @NewStatus Bit
 
    SELECT @OldID = Departamento FROM DELETED
    
    Select @NewID = I.Departamento, @NewStatus = I.Status
    From Inserted I    
    
    Declare @Valor int
    
    Set @Valor = 0
        
    Select @Valor = IsNull(Count(*), 0)
    From TipoCambioDep T
    Inner Join Inserted I on T.Departamento = I.Departamento 
    Where T.Status <> 0
    
    If (@Valor >= 1) and (@NewStatus <> 0) Begin
      RAISERROR ('Ya existe un registro activo para esta tabla', 16, 1)
      ROLLBACK TRANSACTION
      Return
    end
    
    If (@Valor = 1) and (@NewStatus = 0) Begin
      RAISERROR ('Debe existir al menos un registro activo.', 16, 1)
      ROLLBACK TRANSACTION
      Return
    end
    
    Update TipoCambioDep
    Set Departamento = I.Departamento, TipoCambio = I.TipoCambio, Status = I.Status
    From TipoCambioDep T
    inner Join Inserted I on I.Departamento = @NewID
    Where T.Departamento = @OldID
END
GO

Faltaría validar la parte del "DELETE", pero eso lo haremos en la próxima versión .

Nuevamente, a menos que alguien tenga algo que aportar o algo que señalar, quedaría resuelto.

Gracias a todos.
__________________

Responder Con Cita
 



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
Sumar registros duplicados carlosegs11 SQL 6 26-07-2007 23:10:01
Registros duplicados Shidalis SQL 2 06-12-2005 22:46:44
registros duplicados kryna Conexión con bases de datos 3 08-04-2005 09:33:07
Eliminar Registros Duplicados ? Jvilomar Firebird e Interbase 14 16-03-2004 22:14:35
Registros duplicados jgutti SQL 1 02-03-2004 16:45:47


La franja horaria es GMT +2. Ahora son las 21:58:36.


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