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

autonumerico y triggers

Estas en el tema de autonumerico y triggers en el foro de SQL Server en Foros del Web. Hola.. tengo un trigger bien sencillo: CREATE TRIGGER insertMarcas ON [dbo].[Marcas] FOR INSERT AS DECLARE @ID numeric select @ID = (select Cod_Marc from inserted) insert ...
  #1 (permalink)  
Antiguo 21/02/2006, 01:12
Avatar de mamon  
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 1.302
Antigüedad: 22 años, 3 meses
Puntos: 3
Pregunta autonumerico y triggers

Hola.. tengo un trigger bien sencillo:
CREATE TRIGGER insertMarcas ON [dbo].[Marcas]
FOR INSERT
AS
DECLARE @ID numeric
select @ID = (select Cod_Marc from inserted)
insert into auditoria (tipo, tabla, Cod_Tabla) values (0, 'Marcas', Convert(varchar(15), @ID))

lo que hace es recuperar el ID que de la tabla marcas y luego en la tabla auditoria agrega un 0, el nombre de la tabla y el ID del registro q se creo en la tabla marcas... todo me funciona bien pero el unico problema sale cuando es un autonumerico... cuando el campo Cod_Marc es autonumérico el id q recupera es otro.. x ejemplo, si el autonumérico es 15 y hay 4 registros en esa tabla, el id q me manda es el 5.. entonces eso está mal.. q debo cambiar de mi trigger?
__________________
Yo si sé lo que es trabajar duro, porque lo he visto.
  #2 (permalink)  
Antiguo 23/02/2006, 00:23
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Qué tal un SELECT @@IDENTITY ?

CREATE TRIGGER insertMarcas ON [dbo].[Marcas]
FOR INSERT
AS
DECLARE @ID numeric
select @ID = (SELECT @@IDENTITY FROM INSERTED)
insert into auditoria (tipo, tabla, Cod_Tabla) values (0, 'Marcas', Convert(varchar(15), @ID))
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 24/02/2006, 16:23
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
El código tiene un defecto: asume que solo insertas registros de uno en uno, dado el caso de que insertes en bloque (créeme, lo llegarás a necesitar alguna vez) el trigger fallará.

Aunque no se me ocurre como librarlo si SELECT campo_identity FROM Inserted no regresa el dato esperado
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 24/02/2006, 16:48
Avatar de mamon  
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 1.302
Antigüedad: 22 años, 3 meses
Puntos: 3
no sé pasa.. agrego manualmente un registro en la tabla, se pone un ID automático.. digamos el 34, auqnue al parecer como hay solo 2 registros pero he borrado y todo tocaría el 34 para q nunca repita el ID.. ok, lo hace automático.. pero cuando cierro la ventana y vuelvo a entra me sale el ID 3.. en el trigger graba el 34.. pero en la tabla se cambió a 3.. xq?
__________________
Yo si sé lo que es trabajar duro, porque lo he visto.
  #5 (permalink)  
Antiguo 28/02/2006, 00:40
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
No tendrás alguna instrucción de reseed?
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 28/02/2006, 00:41
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Cita:
Iniciado por Mithrandir
El código tiene un defecto: asume que solo insertas registros de uno en uno, dado el caso de que insertes en bloque (créeme, lo llegarás a necesitar alguna vez) el trigger fallará.

Aunque no se me ocurre como librarlo si SELECT campo_identity FROM Inserted no regresa el dato esperado
Es cierto Mith...la alternativa quizás sería obtener el máximo antes de la incersión y después de ella, y quizás correr una especie de cursor...ineficiente, pero más seguro.

Saludos.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 28/02/2006, 08:42
Avatar de mamon  
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 1.302
Antigüedad: 22 años, 3 meses
Puntos: 3
mmm... pero solo se ingresa un registro a la vez.. no es como un bucle.. o no tiene nada q ver?.. otra cosa, la base de datos no la cree yo... qué quiere decir una instrucción reseed?
__________________
Yo si sé lo que es trabajar duro, porque lo he visto.
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 15:11.