Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

no me funciona el trigger

Estas en el tema de no me funciona el trigger en el foro de SQL Server en Foros del Web. resulta que tengo el siguiente trigger ALTER TRIGGER [T_INS_GRUPO] ON [dbo].[GRUPO] --INSTEAD OF FOR INSERT AS BEGIN DECLARE @CONSECUTIVO AS NVARCHAR(10) DECLARE @NOMBRE_TABLA AS NVARCHAR(30) ...
  #1 (permalink)  
Antiguo 17/08/2010, 08:34
 
Fecha de Ingreso: abril-2009
Ubicación: Bogota
Mensajes: 217
Antigüedad: 15 años
Puntos: 1
Exclamación no me funciona el trigger

resulta que tengo el siguiente trigger

ALTER TRIGGER [T_INS_GRUPO]
ON [dbo].[GRUPO]
--INSTEAD OF
FOR INSERT
AS
BEGIN
DECLARE @CONSECUTIVO AS NVARCHAR(10)
DECLARE @NOMBRE_TABLA AS NVARCHAR(30)
SET @NOMBRE_TABLA = 'GRUPO'
SELECT @CONSECUTIVO=DBO.CONSECUTIVO(@NOMBRE_TABLA)+1
UPDATE REFECONSECUTIVOS SET TX_CONS_REFE = @CONSECUTIVO WHERE UPPER(LTRIM(RTRIM(TX_NOMB_REFE))) = UPPER(LTRIM(RTRIM(@NOMBRE_TABLA )))

INSERT INTO GRUPO_MENU
(NU_AUTO_GRUP
,TX_NOMB_GRUP
,TX_DESC_GRUP
,TX_IMAG_GRUP
,NU_ESTA_GRUP
,NU_HIJO_GRUP
,TX_LINK_GRUP
,NU_ELIM_ACTI
)
select
@CONSECUTIVO
,TX_NOMB_GRUP
,TX_DESC_GRUP
,TX_IMAG_GRUP
,NU_ESTA_GRUP
,NU_HIJO_GRUP
,TX_LINK_GRUP
,NU_ELIM_ACTI FROM INSERTED

END

este trigger deberia ingresar un id insertar en el campo nu_auto_grup un codigo que me da la funcion consecutivo la cual coonsulta la tabla refeconsecutivo para obtener el codigo y despues lo actualiza, pero no funciona, este trigger deberia activarse cuando yo voy a realizar un insert pero no lo hace, que esta mal, ayudenme
__________________
cuidensen y que arceus los acompanhe
  #2 (permalink)  
Antiguo 17/08/2010, 10:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: no me funciona el trigger

¿Quien te dijo o donde viste esta instruccion?

SELECT @CONSECUTIVO=DBO.CONSECUTIVO(@NOMBRE_TABLA)+1

Tu SELECT jamaz funcionara consultado una variable donde traes el nombre de la tabla.

Ademas, las buenas practicas te dirian, que el consecutivo lo debes obener en un PROCEDIMIENTO ALMACENADO que haga el trabajo de INSERT.

Ya que los triggers fueron creados en su momento para cuidar el DRI
  #3 (permalink)  
Antiguo 17/08/2010, 10:36
 
Fecha de Ingreso: abril-2009
Ubicación: Bogota
Mensajes: 217
Antigüedad: 15 años
Puntos: 1
Respuesta: no me funciona el trigger

hola iislas gusto en verte, bueno pues en donde vi la sentencia SELECT @CONSECUTIVO=DBO.CONSECUTIVO(@NOMBRE_TABLA)+1, la vi en un trigger que hace lo mismo pero en otra tabla ya que soy un desarrollador y las perosnas que estaban encaradas de esta pagina ya no estan de modo que me contrataron a mi, la cosa es que en otros funciona perfecto, ademas DBO.CONSECUTIVO no es una tabla, es una funcion la cual se le da el nombre de la tabla y me debuelve el consecutivo que necesito, y que es un DRI
__________________
cuidensen y que arceus los acompanhe
  #4 (permalink)  
Antiguo 17/08/2010, 10:50
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: no me funciona el trigger

DRI, son las siglas den ingles que identifican a la DECLARATIVA DE INTEGRIDAD REFERENCIA, en otras cosas, se cuida la integridad de la informacion.

Volvamos a las buenas practicas, jama hubiera sabido que es una funcion, a menos claro que lo identificaras en el nombre, por ejemplo

tblConsecutivo
fnConsecutivo
procConsecutivo

Al estar manejando o manipulando los datos en un trigger, no puedes manejar tus transacciones (BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN), por tatno, no existe forma para saber si esta trabajando adecuadamente.

Por otro lado, un trigger se dispara solo una vez, no, por el numero de registros para la tabla que fue credo, me explico

Si hago un DELETE tablax WHERE Campo = 20

Puede que borre 1 registro o 2,000,000 de registros, dependera del filtro (WHERE), pero el trigger, solo se dispararia UNA SOLA VEZ en ambos casos.

¿De acuerdo?
  #5 (permalink)  
Antiguo 17/08/2010, 14:27
 
Fecha de Ingreso: abril-2009
Ubicación: Bogota
Mensajes: 217
Antigüedad: 15 años
Puntos: 1
Respuesta: no me funciona el trigger

pero solo voy a ingresar un solo registro de modo que solo necesito que se active el trigger una sola vez, tambien respecto al si el trigger es el que causa errorporque el SP del insert es muy simple asi que no me debe generar error pero de todos modos lo coloco acontinuacion para que me digas

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go





ALTER PROCEDURE [dbo].[SP_GRUPO_INS]
@TX_NOMB_GRUP varchar(50)
,@NU_AUTO_GRUP INT
,@TX_DESC_GRUP varchar(50)
,@TX_IMAG_GRUP varchar(100)
,@NU_ESTA_GRUP varchar(100)
,@NU_HIJO_GRUP INT
,@TX_LINK_GRUP VARCHAR(50)
,@NU_ELIM_ACTI NUMERIC(1)


AS
BEGIN
INSERT INTO GRUPO
(NU_AUTO_GRUP
,TX_NOMB_GRUP
,TX_DESC_GRUP
,TX_IMAG_GRUP
,NU_ESTA_GRUP
,NU_HIJO_GRUP
,TX_LINK_GRUP
,NU_ELIM_ACTI
)
VALUES(@NU_AUTO_GRUP
,@TX_NOMB_GRUP
,@TX_DESC_GRUP
,@TX_IMAG_GRUP
,@NU_ESTA_GRUP
,@NU_HIJO_GRUP
,@TX_LINK_GRUP
,@NU_ELIM_ACTI
)

IF @@rowcount = 0
BEGIN
ROLLBACK TRAN INSERTAR
END
ELSE
BEGIN
COMMIT TRAN INSERTAR
END
END





ademas al principio aclare que dbo.consecutivo era una funcion
__________________
cuidensen y que arceus los acompanhe
  #6 (permalink)  
Antiguo 17/08/2010, 14:34
 
Fecha de Ingreso: abril-2009
Ubicación: Bogota
Mensajes: 217
Antigüedad: 15 años
Puntos: 1
Respuesta: no me funciona el trigger

aproposito en que momento se activa el trigger
__________________
cuidensen y que arceus los acompanhe
  #7 (permalink)  
Antiguo 17/08/2010, 16:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: no me funciona el trigger

El trigger se activa al momento del INSERT

Tu procedimiento esta mal, deberias tener un BEGIN TRAN [name_tran], en algun lado para poder hacer un COMMIT TRAN o aplicar un ROLLBACK TRAN.

Y aplicando las buenas costumbres del desarrollo, la generacion del siguiente folio, deberia estar precisamente en el cuerpo de tu procedimiento.
  #8 (permalink)  
Antiguo 18/08/2010, 16:18
 
Fecha de Ingreso: abril-2009
Ubicación: Bogota
Mensajes: 217
Antigüedad: 15 años
Puntos: 1
Respuesta: no me funciona el trigger

ya lo agregue (el begin trans) y sigue igual, lo del resto, lo respondo mas tarde



... mas tarde.... :)

bueno te hice caso respecto a colocar el codigo de obtencion del siguiente folio la coloque en el procedimiento almacenado y quite el trigger y ya funciona, gracias por todo iislas


posdata, caundo pregunte en que momento se activa el trigger me referia a en que parte del insert
__________________
cuidensen y que arceus los acompanhe

Última edición por porygon_humano; 20/08/2010 a las 09:31

Etiquetas: trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:04.