Ayuda con Trigger de Inserción

Necesito de su ayuda para afinar un poco el trigger que estoy creando. Les cuento que este trigger lo que hace es que cuando se ingresa un registro en la tabla 1, automáticamente ingresa el mismo registro en la tabla 2 junto a otros campos. Hasta el momento todo bien. Lo probé con varios insert y funcionó perfecto. El error viene cuando ejecuto esta sentencia:

insert into [dbo].[descarga_reparaciones_cerradas] ([ps], [fecha_cierre_tecnico], [num_fact])SELECT * FROM [dbo].[COPIA_PRUEBA_DESCARGA];

La sentencia funciona excelente, pero el trigger sólo me inserta el primer registro, nada más. Se me ocurrió que podría arreglarlo con un bucle pero no tengo idea cómo hacerlo. Si pudieran ayudarme se los agradecería. Les adjunto el trigger para que le echen un vistazo:

--USE Pruebas
create trigger trg_insertar ON [Pruebas].[dbo].[descarga_reparaciones_cerradas]
after insert
as
begin
 --Descativa los mensajes de consola
 set nocount om;
--Declaramos las variables a utilizar en la asignación y la insersión
 DECLARE @ps varchar(25)
DECLARE @fecha_cierre_tecnico datetime
DECLARE @num_fact varchar(25)
--DECLARE @DEPENDENCIA_NUM_FACT VARCHAR(1),
 --DECLARE @DIA INT,
 --DECLARE @MES INT,
 --DECLARE @ANIO INT,
 --DECLARE @ATRASO INT
 --Asignamos las variables locales a los campos de la tabla
 SELECT @ps = ps,
@fecha_cierre_tecnico = fecha_cierre_tecnico,
@num_fact = num_fact
from inserted;--inserted hace alusión a que se insertaran estos registros
 --Verificamos que el campo Num_Fact no esté vacío
if((@num_fact <> null) or (@num_fact <>''))
 begin
 insert into desc_rep_cerr_copia
 (ps, fecha_cierre_tecnico, num_fact, dependencia_num_fact,
 dia, mes, anio, atraso) 
 values(@ps, @fecha_cierre_tecnico, @num_fact, 1,
 (select day(@fecha_cierre_tecnico)), (select month(@fecha_cierre_tecnico)),
 (select year(@fecha_cierre_tecnico)), (select datediff(dat,getDate(), @fecha_cierre_tecnico)));
 end 
 else
 begin
insert into desc_rep_cerr_copia
(ps, fecha_cierre_tecnico, num_fact, dependencia_num_fact,
dia, mes, anio, atraso) 
values(@ps, @fecha_cierre_tecnico, @num_fact, 0,
(select day(@fecha_cierre_tecnico)), (select month(@fecha_cierre_tecnico)),
(select year(@fecha_cierre_tecnico)), (select datediff(dat,getDate(), @fecha_cierre_tecnico)));
 end
end

Cualquier aporte o crítica será bienvenida.

1 respuesta

Respuesta
1

To script esta mal.

1. el script es set nocount ON, tuyo dice OM.

2. quita los select que están en la clausula values de todos tus insert.

3. En el último insert, el ultimo parámetro de la clausula values tienes "select datediff(dat, ..." qué es ese "dat"¿? Ahí debes de indicare que parte de fecha usaras; day, month o year.

Cambia eso, lo pruebas y me avisas. Buena vibra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas