Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/12/2006, 12:11
NEST
 
Fecha de Ingreso: octubre-2006
Mensajes: 86
Antigüedad: 17 años, 7 meses
Puntos: 1
Sonrisa

Gracias por tu tiempo fijate que el problema es que el trigger se me ejecuta cuando solo es un registro el que se actualiza pero cuando hacen un update masivo el trigger me da el siguiente error
"Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."
el trigger que ejecuto es el siguiente:
Cita:
Create Trigger [Tgr_PedidoUpdate] on [dbo].[Pedido]
For Update
As
begin
/*------------------------------------------------------------------------------------------------------------------------------------------*/
declare @NombreTabla varchar(50), @Id_pedido int , @FechaActualizacion datetime, @Bandera int
/*------------------------------------------------------------------------------------------------------------------------------------------*/
DECLARE @Id_pedido_n VARCHAR(10), @Fecha_crea_n SMALLDATETIME, @doc_ref_n VARCHAR(20)
/*-----------------------------------------------------------------------------------------------------------------------------------------------------*/
DECLARE @Id_pedido_a VARCHAR(10), @Fecha_crea_a SMALLDATETIME, @doc_ref_a VARCHAR(20)
/*------------------------------------------------------------------------------------------------------------------------------------------------------*/
SET @NombreTabla = 'Pedido'
SELECT @Id_pedido = (SELECT Id_pedido FROM Inserted)
SET @FechaActualizacion = GETDATE()
SET @Bandera = 0
/*------------------------------------------------------------------------------------------------------------------------------------------------------*/
SELECT @Fecha_crea_a = (SELECT Fecha_crea FROM Deleted WHERE Id_pedido = @Id_pedido)
SELECT @Fecha_crea_n = (SELECT Fecha_crea FROM Inserted WHERE Id_pedido = @Id_pedido)
SELECT @doc_ref_a = (SELECT doc_ref FROM Deleted WHERE Id_pedido = @Id_pedido)
SELECT @doc_ref_n = (SELECT doc_ref FROM Inserted WHERE Id_pedido = @Id_pedido)
/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/
IF(@Fecha_crea_a <> @Fecha_crea_n)
BEGIN
DECLARE @CampoModificado_Fca varchar(20)
SET @CampoModificado_Fca = 'Fecha_crea'
INSERT INTO Materiales.dbo.PM_ChangeLogMat(NombreTabla, IdFilaAfectada, FechaCambio, Bandera, Campo_Modificado, CambioRea) values(@NombreTabla, @Id_pedido, @FechaActualizacion, @Bandera, @CampoModificado_Fca, 'Se Actualizo de:' + RTRIM(LTRIM(CONVERT(nvarchar, @Fecha_crea_a))) + ' a ' + RTRIM(LTRIM(CONVERT(nvarchar, @Fecha_crea_n))))
END

IF(@doc_ref_a <> @doc_ref_n)
BEGIN
DECLARE @CampoModificado_Drf varchar(20)
SET @CampoModificado_Drf = 'doc_ref'
INSERT INTO Materiales.dbo.PM_ChangeLogMat(NombreTabla, IdFilaAfectada, FechaCambio, Bandera, Campo_Modificado, CambioRea) values(@NombreTabla, @Id_pedido, @FechaActualizacion, @Bandera, @CampoModificado_Drf, 'Se Actualizo de:' + RTRIM(LTRIM(@doc_ref_a)) + ' a ' + RTRIM(LTRIM(@doc_ref_n)))
END

END
entonces lo que me han pedido es que en una tabla almacene todos las actualizaciones que se realizan en la tabla Principal pero quieren que lo haga desde SQL entonces no se como hacerlo.

No se si hay alguna forma de logar que un trigger se dispare en actualizaciones masivas o hay otra forma de llevar este control