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

Incrementar un campo desde un trigger

Estas en el tema de Incrementar un campo desde un trigger en el foro de SQL Server en Foros del Web. Cuando mi tableOrigen recibe datos inmediatamente se ejecuta el trigger para insertar paralelamente a mi otra tabla que denomino tableDestino ALTER TRIGGER [dbo].[insertar_dbOrigen] ON [dbo].[tableOrigen] ...

  #31 (permalink)  
Antiguo 06/09/2012, 14:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

Cuando mi tableOrigen recibe datos inmediatamente se ejecuta el trigger para insertar paralelamente a mi otra tabla que denomino tableDestino

ALTER TRIGGER [dbo].[insertar_dbOrigen] ON [dbo].[tableOrigen]
AFTER INSERT
AS
BEGIN
INSERT INTO dboDestino.dbo.tableDestino
(id, campoInt1, campoDate1, campoDate2, campoDate3, campoVarchar1, campoInt2, campoVarchar2, campoVarchar3, campoVarchar4, campoVarchar5, campoInt3, campoVarchar6, campoInt4, campoVarchar7, campoVarchar8)
SELECT row_number() over (partition BY i.campo1 ORDER BY i.campo2) AS id,
i.campo3, GETDATE(), GETDATE(), GETDATE(), i.campo4, i.campo5, i.campo6, i.campo7, i.campo8, i.campo9, i.campo10, i.campo11, 1, i.campo12,i.campo13
FROM inserted i
end
  #32 (permalink)  
Antiguo 06/09/2012, 14:32
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

ALTER TRIGGER [dbo].[insertar_dbOrigen] ON [dbo].[tableOrigen]
AFTER INSERT
AS
BEGIN
INSERT INTO dboDestino.dbo.tableDestino
(id, campoInt1, campoDate1, campoDate2, campoDate3, campoVarchar1, campoInt2, campoVarchar2, campoVarchar3, campoVarchar4, campoVarchar5, campoInt3, campoVarchar6, campoInt4, campoVarchar7, campoVarchar8)
SELECT row_number() over (partition BY i.campo1 ORDER BY i.campo1) AS id,
i.campo3, GETDATE(), GETDATE(), GETDATE(), i.campo4, i.campo5, i.campo6, i.campo7, i.campo8, i.campo9, i.campo10, i.campo11, 1, i.campo12,i.campo13
FROM inserted i
end

prueba con esto

y cual es el resultado que te regresa ese query?? otra cosa , estamos suponiendo que campo1 tiene como el ejemplo
campo1 campo2
1 2012-09-06 12:27:09.197
1 2012-09-06 12:27:09.197
1 2012-09-06 12:27:09.200
1 2012-09-06 12:27:09.200
1 2012-09-06 12:27:09.200
1 2012-09-06 12:27:09.200
1 2012-09-06 12:27:09.203
1 2012-09-06 12:27:09.203
2 2012-09-06 12:27:09.200
2 2012-09-06 12:27:09.200
2 2012-09-06 12:27:09.203
3 2012-09-06 12:27:09.203
3 2012-09-06 12:27:09.203

que campo 1 tiene el valor que necesitas que si cambia "resete" el contador right??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #33 (permalink)  
Antiguo 06/09/2012, 14:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

mis datos de campo1 son:

campo1
5
5
1
5
5
7
49
5
5
5

lo de reset no te entendi =(
  #34 (permalink)  
Antiguo 06/09/2012, 14:59
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

y nada aun sigo obteniendo "id=1" ='(
  #35 (permalink)  
Antiguo 06/09/2012, 14:59
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

haber copio el resultado....
  #36 (permalink)  
Antiguo 06/09/2012, 14:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

sip lo que necesitas que sea:

id dato
1 1
1 5
2 5
3 5
4 5
5 5
6 5
7 5
8 7
1 49

con el row_number no te da eso??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #37 (permalink)  
Antiguo 06/09/2012, 15:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

id campo1 campo2 ...
1 5 2012-09-07 16:03:18.920...
1 5 2012-09-08 16:03:18.920...
1 5 2012-09-09 16:03:18.920...
1 5 2012-09-10 16:03:18.920...
1 1 2012-09-11 16:03:18.937...
1 5 2012-09-12 16:03:18.937..
1 7 2012-09-13 16:03:18.937....
1 49 2012-09-14 16:03:18.937...
1 5 2012-09-15 16:03:18.937...
1 5 2012-09-16 16:03:18.937...
  #38 (permalink)  
Antiguo 06/09/2012, 15:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

eso es lo que tengo y he cambiado a esto que me indicaste:

SELECT row_number() over (partition BY i.campo1 ORDER BY i.campo1) AS id
  #39 (permalink)  
Antiguo 06/09/2012, 15:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

me puedes decir este query que te regresa ejecutalo tal cual:


Código SQL:
Ver original
  1. CREATE TABLE #t1 (campo1 VARCHAR(10), campo2 datetime)
  2. INSERT INTO #t1 VALUES ('1',getdate())
  3. INSERT INTO #t1 VALUES ('1',getdate())
  4. INSERT INTO #t1 VALUES ('1',getdate())
  5. INSERT INTO #t1 VALUES ('2',getdate())
  6. INSERT INTO #t1 VALUES ('1',getdate())
  7. INSERT INTO #t1 VALUES ('2',getdate())
  8. INSERT INTO #t1 VALUES ('1',getdate())
  9. INSERT INTO #t1 VALUES ('1',getdate())
  10. INSERT INTO #t1 VALUES ('1',getdate())
  11. INSERT INTO #t1 VALUES ('3',getdate())
  12. INSERT INTO #t1 VALUES ('3',getdate())
  13. INSERT INTO #t1 VALUES ('1',getdate())
  14. INSERT INTO #t1 VALUES ('2',getdate())
  15. GO
  16.  
  17. SELECT ROW_NUMBER() OVER (partition BY campo1 ORDER BY campo1) AS id, campo1,campo2 FROM #t1

te regresa lo que necesitas o no y pon favor por el resultado :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #40 (permalink)  
Antiguo 06/09/2012, 16:12
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

si funciona pero esto siempre si es en una tabla temporal el problema ocurre cuando lo ejecuto a otra base de datos =S
  #41 (permalink)  
Antiguo 06/09/2012, 16:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

libras tienes msn?
  #42 (permalink)  
Antiguo 06/09/2012, 16:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

entonces si funciona con una temporal el problema es con tus datos que estas manejando, prueba a hacer varias conbinaciones por ejemplo nada mas regresa esto en tu select(no insertes)

SELECT row_number() over (partition BY i.campo1 ORDER BY i.campo1) AS id,
i.campo1, GETDATE()
FROM inserted i

y ve que regresa, despues agregas otro campo

SELECT row_number() over (partition BY i.campo1 ORDER BY i.campo1) AS id,
i.campo3, GETDATE(), GETDATE()
FROM inserted i

y asi te daras cuenta en donde esta fallando

mi msn es [email protected](esta en mi informacion) mi skype es librasgarcia creo......

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #43 (permalink)  
Antiguo 06/09/2012, 16:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

ok lo intentare
  #44 (permalink)  
Antiguo 06/09/2012, 16:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

SABES QUITE TODOS MIS CAMPOS Y ME QUEDE SOLO CON UNO CAMPO1 Y LA INSERCION :

INSERT INTO dbdestino.dbo.tableDestino
(ID, CAMPO1)
SELECT row_number() over (partition BY i.CAMPO1 ORDER BY i.CAMPO1),
i.CAMPO1
FROM inserted i
END

Y NADA HABER TE AGREGO AL MSN UN TOKE
  #45 (permalink)  
Antiguo 06/09/2012, 17:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

UHMMM ya cuando hago la insercion a la base de origen lo hago de la sigte. forma:
insert into ...
values (...)
insert into ...
values (...)
insert into ...
values (...)
entonces cada vez que se ejecuta un insert cuenta desde 1 por eso es que supongo que por eso nunca va a contar mas de 1 por que siempre es de 1 en 1
en una tabla donde existe datos claro funciona porque ya existe datos,
en este caso los datos llegan en tiempo real
como puedo solucionar esto ??
  #46 (permalink)  
Antiguo 07/09/2012, 07:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

aaa entonces tu tabla inserted tendria solamente

campo1 campo2
1 'a'

cada vez que se ejecuta cierto? no pues de esa manera nunca se podra obtener lo que necesitas, lo que necesitarias seria hacer una reconciliacion de datos contra la base de datos donde estas almacenando la informacion algo asi:

Código SQL:
Ver original
  1. INSERT INTO tabla VALUES (id,campo1,campo2)
  2. SELECT 0,campo1,campo2 FROM inserted
  3.  
  4. UPDATE tabla
  5. SET id=t1.id
  6. FROM
  7. (
  8. SELECT ROW_NUMBER() OVER (partition BY campo1 ORDER BY campo1) AS id, campo1 FROM tabla
  9. ) AS t1 WHERE t1.campo1=tabla.campo1

asi tendrias lo siguiente:

digamos insertas:

campo1 campo2
1 'g'

y ya tienes en tu tabla
campo1 campo2
1 'a'
1 'b'
1 'c'
2 'd'
2 'e'

entonces quedaria

id campo1 campo2
1 1 'a'
2 1 'b'
3 1 'c'
1 2 'd'
2 2 'e'
0 1 'g'

y hacemos el update

y nos queda lo que buscas

id campo1 campo2
1 1 'a'
2 1 'b'
3 1 'c'
4 1 'g'
1 2 'd'
2 2 'e'


:)

saludos!

P.D: Casi no uso el msn, mejor mandame un email a mi cuenta :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #47 (permalink)  
Antiguo 07/09/2012, 08:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

ok tampoco uso el msn pero esto si es una urgencia para mi caso =(.

No puedo hacer nada con la base de datos original, eso es importante, sino me enjuician jajaja no hablando en serio no debo conciliar con la base de datos original sino todo fuera mas facil.

Y todo este proceso es en tiempo real ni bien ingresa data a la base de datos al instante debe llenar mi base de datos llamemosle tipo backup que puede ser modificable por el campo id con tal que tenga esa correlatividad condicionado por el tipo de uno de los campos tal y como estoy haciendo mi consulta aqui mismo.

Si no es factible podrian darme ideas de como hacer esto =( pls
  #48 (permalink)  
Antiguo 07/09/2012, 08:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

la opcion que te estoy dando es sobre tu tabla "final" si estas ejecutando un trigger puedes hacer varios procesos a la vez(si el trigger es after insert claro esta) puedes hacer el insert y despues de eso el update pero sobre tu tabla "modificable" entiendes???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #49 (permalink)  
Antiguo 07/09/2012, 10:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

ahhhh si ok entonces ese update podria hacerlo en otro trigger update a eso te refieres?
  #50 (permalink)  
Antiguo 07/09/2012, 10:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

es decir en mi tableDestino??
  #51 (permalink)  
Antiguo 07/09/2012, 10:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

no en el mismo trigger after insert :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #52 (permalink)  
Antiguo 07/09/2012, 10:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

ok haber voy a hacerlo
  #53 (permalink)  
Antiguo 07/09/2012, 23:02
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Incrementar un campo desde un trigger

No tengo muy claro el escenario completo, pero si la única diferencia entre la tabla origen y la tabla destino es el campo Id, entonces insisto en la recomendación inicial: no necesitas crear y mantener la tabla destino ya que el valor de Id puede ser un campo calculado utilizando la función rank() sobre la tabla origen. Suponiendo que T1 es origen y T2 es destino, puedes tener:

Código:
create table T1 (campo1, campo2)
go

create view T2 as
 select rank() over (partition by campo1 order by campo2) as id,
 campo1,
 campo2
 from t1
go
De lo contrario, si por alguna razón necesitas crear la tabla destino, no puedes utilizar la función rank() sobre la tabla lógica Inserted del trigger, y esto es porque Inserted solo contiene el registro insertado o los registros actualizados, mientras que la función rank() en la consulta propuesta solo funciona con el total de los registros. En este caso, puedes tener dos opciones para el trigger de T1:

1. Pasar todos los registros de T1 a T2 en cada ejecución del trigger.

Código:
create trigger trg1 on t1
after insert
as
begin
 truncate table t2;
 insert into t2
 select 
  rank() over (partition by campo1 order by campo2) as id,
  campo1,
  campo2
 from t1;
end;
go
2. Si tienes alguna forma de relacionar T1 y T2 (ej: campo_ident), pasar solo los registros nuevos.

Código:
create trigger trg1 on t1
after insert
as
begin
 insert into t2
 select 
  rank() over (partition by campo1 order by campo2) as id,
  campo1,
  campo2
 from t1
 where 
   campo_ident not in (select campo_ident from t2);
end;
go
Saludos
  #54 (permalink)  
Antiguo 10/09/2012, 08:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

Dices que la función rank() solo funciona con el total de los registros, pues no era lo que requeria pero bueno gracias por la ayuda matanga, al final pude dar fin a esto, no obtuve solucion pero acorde con que aquel id sea correlativo con ciertas condiciones en fin. Gracias por vuestras ayudas.
  #55 (permalink)  
Antiguo 10/09/2012, 08:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

Hola Lilia, ya tenias resuelto tu problema con los datos que se te dieron, era hacer el trigger junto con un insert y despues un update con la funcion row_number, tambien podias sacarlo como lo tenias con un max(id) +1 pero esto te causaria problemas con la concurrencia....lo bueno es que ya lo solucionaste :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: incrementar, tabla, trigger, campos
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 14:05.