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

Triggers

Estas en el tema de Triggers en el foro de Bases de Datos General en Foros del Web. buenas, EStoy haciendo un trigger para poder incrementar automaticamente el valor de un campo, el trigger es: CREATE TRIGGER incrementar ON [dbo].[Nodos] AFTER INSERT AS ...
  #1 (permalink)  
Antiguo 26/08/2005, 04:30
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Triggers

buenas,

EStoy haciendo un trigger para poder incrementar automaticamente el valor de un campo, el trigger es:

CREATE TRIGGER incrementar ON [dbo].[Nodos]
AFTER INSERT
AS
Declare @num int
select @num=dbo.inc_nodos(IdEC)


Pues bien inc_nodos es:

CREATE FUNCTION dbo.[inc_nodos] (@ic int)
RETURNS int AS
BEGIN
RETURN(SELECT MAX (NodoEC) FROM Nodos WHERE IdEC= @ic)
END


Y el trigger me da un error en IdEC que es un campo de la tabla nodos, y si le pongo como Nodos.IdEC me dice error del prefijo en IdEC, alguna idea?¿

Otra forma que lo he hecho y no me da error es esta:

CREATE TRIGGER incrementar ON dbo.Nodos
AFTER INSERT
AS
begin
Declare @num int
Declare @id int
select @id=IdEC From inserted
update insertered.NodoEC SET NodoEC=NodoEC+1 FROM Nodos WHERE IdEC=@id
end

Pero al parcer no hace nada, sabeis como se asocia un trigger al campo?¿, pq quieza tenga q poner algo en el espacio "formula" del campo de la tabla

Última edición por kakarot; 26/08/2005 a las 04:45
  #2 (permalink)  
Antiguo 26/08/2005, 05:38
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
como dijo Jack el Destripador vayamos por partes, tu idea es poner en un campo el máximo valor de ese campo + 1 a la hora de insertarlo no?para ello haces una función inc_nodos que te obtendría el máximo valor de ese campo y después quieres hacer un trigger que al insertar el registro te actualice ese valor, creo que mezclando las dos cosas que has hecho obtendrías lo que quieres, quedaría algo así

Código:
CREATE TRIGGER incrementar ON dbo.Nodos 
AFTER INSERT 
AS
begin
Declare @id int
select @id=IdEC From inserted
update NodoEC SET NodoEC=dbo.inc_nodos(id) FROM Nodos WHERE IdEC=@id
end
Otra cosa, el campo IdEC es un identificador único de la tabla? porque si es así la función dbo.inc_nodos no está bien y debería ser algo así

Código:
CREATE FUNCTION dbo.[inc_nodos] ) 
RETURNS int AS 
BEGIN 
RETURN (SELECT MAX (NodoEC) FROM Nodos)
END
ya que de la otra manera estás obteniendo el valor del campo con id igual a la variable que le pases, pero no necesariamente el máximo de la tabla

prueba eso y me comentas qué tal te fue
  #3 (permalink)  
Antiguo 26/08/2005, 06:55
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Primero de todo agradecerte tu respuesta, y ahora como tu bien has dicho vamos por partes

Como tu bien me has dicho IdEC es la clave primaria de la tabla EC, pero claro la funcion que he puesto era esta:

CREATE FUNCTION dbo.[inc_nodos] (@ic int)
RETURNS int AS
BEGIN
RETURN(SELECT MAX (NodoEC) FROM Nodos WHERE IdEC= @ic)
END

Por el motivo que yo quiero que me saque el valor maximo de nodoEC de una EC concreta por lo que tengo que pasarle el paremetro IdEC para que sepa de cual EC esto hablando es correcto?¿

Ahora respecto al tigger, si lo que te he dicho es correcto entonces quedaria de la manera:

CREATE TRIGGER incrementar ON dbo.Nodos
AFTER INSERT
AS
begin
Declare @id int
select @id=IdEC From inserted
update NodoEC SET NodoEC=dbo.inc_nodos(@id)+1 FROM Nodos WHERE IdEC=@id
end

Si te das cuenta dentro de la funcion inc_nodos le he puesto la '@' ya que quiero que me 'coja' como parametro la idEc concreta, es correcto?¿

Luego para que esto se ejecute en el campo 'NODOEC' de mi tabla nodos tengo que hacer algo en especial?¿, como poner algo en la propiedad 'formula' de ese campo o algo?¿

Gracias tio, veo q te has peleado con esto ya....

Esto que hablemos no podre probarlo hasta el lunes, pero si sacamos algo en claro ya pues mucho mejor.

GRACIAS de nuevo
  #4 (permalink)  
Antiguo 29/08/2005, 00:42
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
Si IdEC es clave primaria de la tabla quiere decir que identificas el registro con ese valor, en ese caso no te haría falta obtener el máximo ya que el valor que obtengas será máximo, también será mínimo, ya que será el único que obtengas

Por otro lado si tienes el id y lo que quieres es aumentar un campo en uno el trigger podría quedar así

Código:
CREATE TRIGGER incrementar ON dbo.Nodos 
AFTER INSERT 
AS
begin
Declare @id int
select @id=IdEC From inserted
update NodoEC SET NodoEC=NodoEC+1 FROM Nodos WHERE IdEC=@id
end
No haría falta la función ya que el valor de NodoEC ya lo tienes al saber el id

Espero que te sirva
  #5 (permalink)  
Antiguo 29/08/2005, 01:11
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Buenas xaquin, si eso ya lo habia pensado, pero tengo un problema si pongo:

CREATE TRIGGER incrementar ON dbo.Nodos
AFTER INSERT
AS
begin
Declare @id int
select @id=IdEC From inserted
update Nodos SET NodoEC=NodoEC+1 FROM Nodos WHERE IdEC=@id
end

Cuando me voy a la tabla y pongo "devolver filas", inserto manualmente una fila nueva, y en nodo EC no pongo nada, y como tengo que puede ser null, me aparece eso en el campo

Alguna idea?¿

Última edición por kakarot; 29/08/2005 a las 04:08
  #6 (permalink)  
Antiguo 29/08/2005, 04:24
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Buenas y gracias a todos!!!! al final ya lo consegui!!! queda de la siguiente forma:

CREATE TRIGGER incrementar ON dbo.Nodos
AFTER INSERT
AS
begin
Declare @id int
Declare @idnodo int
select @id=IdEC From inserted
select @idnodo=IdNodo From inserted
update Nodos SET NodoEC=dbo.inc_nodos(@id)+1 FROM Nodos WHERE IdNodo=@idnodo
end

Saludos
  #7 (permalink)  
Antiguo 29/08/2005, 04:37
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Ahora una preguntilla de nda igual que esta el "From inserted" esta el from deleted?¿
  #8 (permalink)  
Antiguo 29/08/2005, 04:56
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
si, te dejo un par de enlaces que te pueden ayudar

http://www.netveloper.com/contenido....P=0&IDC=51&P=5

http://www.configuracionesintegrales...asp?articulo=5

son bastante sencillitos, pero dan una visión bastante clara (o al menos eso me parece) de lo que son los triggers y sus posibles utilidades
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 02:53.