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. Hola amigos! Alguien podria ayudarme con esta gran duda =( Tengo una trigger que envia datos a una tabla, y necesito hacer que esta misma, ...

  #1 (permalink)  
Antiguo 05/09/2012, 16:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Incrementar un campo desde un trigger

Hola amigos!

Alguien podria ayudarme con esta gran duda =(

Tengo una trigger que envia datos a una tabla, y necesito hacer que esta misma, se llene el campo id de uno en uno (en el momento de la insercion), no debo usar el autoincrement porque ademas de esto deberia iniciarse desde 1 cuando un campo llamado "tipo != 1"
es decir:

Ejmplo: Tengo estos datos:

tabla origen:

campo1 campo2
1 a
1 b
1 c
2 d
1 e
2 f
1 g
1 h
1 i

etc

entonces estos datos se llenan en otra tabla

tabla destino

id campo1 campo2
1 1 a
2 1 b
3 1 c
4 1 e
5 1 g
1 2 d
2 2 f
6 1 h
7 1 i

Espero que puedan entender este ejemplito =)
  #2 (permalink)  
Antiguo 05/09/2012, 17:20
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

nada =( HElP ME!!!
  #3 (permalink)  
Antiguo 05/09/2012, 17:38
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Incrementar un campo desde un trigger

El campo Id puede ser calculado, no necesitas almacenarlo en la base de datos, por ejemplo:

Código:
create table t1 (campo1 int, campo2 varchar(10))
insert into t1 values (1,'a')
insert into t1 values (1,'b')
insert into t1 values (1,'c')
insert into t1 values (2,'d')
insert into t1 values (1,'e')
insert into t1 values (2,'f')
insert into t1 values (1,'g')
insert into t1 values (1,'h')
insert into t1 values (1,'i')
go

select rank() over (partition by campo1 order by campo2) as id,
campo1,
campo2
from t1
go
Saludos
  #4 (permalink)  
Antiguo 05/09/2012, 19:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

uhm? creo que no me deje entender. Bueno aqui va de nuevo

Aquellos datos que obtengo desde mi base de datos origen los obtengo inmediatamente despues de ejecutar un trigger necesito hacer que en esta insercion desde este trigger se inserte el id incrementado con condicion.
  #5 (permalink)  
Antiguo 05/09/2012, 20:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

este es mi trigger desde mi base de datos "dborigen" que tiene una tabla "tableOrigen"

BEGIN
insert into [dbo].[dbdestino].[tableDestino] (campo1, campo2)
select i.campo1, i.campo2
from inserted i
END

Luego se me ocurre crear un trigger en mi base de datos destino,
se que antes de hacer esta insercion, primero se ejecuta un trigger si es un "AFTER INSERT"
es en este trigger donde necesito hacer la insercion de datos a mi campo id con la siguiente condicion:

Si (campo1 ==1 o campo2==2) y (cantidad (filas si campo1 == 1)==1 y cantidad (filas si campo1 == 2)==1) entonces dbDestino.tableDestino.id = 1
sino dbDestino.tableDestino.id = dbDestino.tableDestino.id + 1

y de alli viene la insercion del resto de datos.


Esto es lo que necesito pero es posible esto? y como podria ser? Pls una ayudita.
  #6 (permalink)  
Antiguo 06/09/2012, 08:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

esta complicado no?
  #7 (permalink)  
Antiguo 06/09/2012, 08:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

pues aplicas la logica que dio el compañero matanga solo que en lugar de hacerlo con una tabla temporal la haces con la tabla inserted algo asi:



insert into tabla destino
select rank() over (partition by campo1 order by campo2) as id,
campo1,
campo2
from inserted


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

con eso obtuve:

id campo1 campo2
1 1 a
1 1 b
1 1 c
1 1 e
1 1 g
1 2 d
1 2 f
1 1 h
1 1 i


alguien puede ayudarme??.
  #9 (permalink)  
Antiguo 06/09/2012, 08:51
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

con los datos que tienes de ejemplo obtengo esto:

Código SQL:
Ver original
  1. CREATE TABLE #t1 (campo1 INT, campo2 VARCHAR(10))
  2. INSERT INTO #t1 VALUES (1,'a')
  3. INSERT INTO #t1 VALUES (1,'b')
  4. INSERT INTO #t1 VALUES (1,'c')
  5. INSERT INTO #t1 VALUES (2,'d')
  6. INSERT INTO #t1 VALUES (1,'e')
  7. INSERT INTO #t1 VALUES (2,'f')
  8. INSERT INTO #t1 VALUES (1,'g')
  9. INSERT INTO #t1 VALUES (1,'h')
  10. INSERT INTO #t1 VALUES (1,'i')
  11. GO
  12.  
  13. SELECT rank() OVER (partition BY campo1 ORDER BY campo2) AS id,
  14. campo1,
  15. campo2
  16. FROM #t1
  17.  
  18. 1   1   a
  19. 2   1   b
  20. 3   1   c
  21. 4   1   e
  22. 5   1   g
  23. 6   1   h
  24. 7   1   i
  25. 1   2   d
  26. 2   2   f

que version de sql server estas usando? estas usando el rank()?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 06/09/2012, 09:18
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

Si estoy usando el rank() y estoy usando en mysql 2005
  #11 (permalink)  
Antiguo 06/09/2012, 09:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

mysql o sql server? porque el rank como se te esta presentando es para sql server.......

si es mysql prueba con esto:

http://stackoverflow.com/questions/3...-rank-function

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

Perdon es con sql server 2005
  #13 (permalink)  
Antiguo 06/09/2012, 09:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

y es de una base de datos a otra base de datos si me dejo entender?
  #14 (permalink)  
Antiguo 06/09/2012, 09:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

esa tabla que se crea donde se guarda?
  #15 (permalink)  
Antiguo 06/09/2012, 09:54
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

ahh son temporales
  #16 (permalink)  
Antiguo 06/09/2012, 10:04
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

Miren tengo esto en mi trigger:

INSERT INTO dbDestino.dbo.tableDestino
(ID, campo1, campo2)
SELECT rank() over (partition by campo1 ORDER BY campo2) AS id,
campo1, campo2
FROM inserted i
end

y obtengo como resultado:

id campo1 campo2
1 1 a
1 1 b
1 1 c
1 1 e
1 1 g
1 2 d
1 2 f
1 1 h
1 1 i
  #17 (permalink)  
Antiguo 06/09/2012, 10:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

que tipo de dato estas manejando? como esta tu tabla inserted? porque ejecuto el query con los valores que tu tienes y me regresa el resultado...no se porque a ti no te sale....ahora prueba nada mas con esto:

SELECT rank() over (partition by i.campo1 ORDER BY i.campo2) AS id,
i.campo1, i.campo2
FROM inserted i

y ve que es lo que regresa, creo que el resultado que pones es cuando haces un select a tu tabla destino no??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 06/09/2012, 10:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

Cuando ejecuto solo el select solo me muestra los datos y sigue mostrando los id = 1
los tipos de datos que estoy usando son
campo 1 int
campo 2 datetime
  #19 (permalink)  
Antiguo 06/09/2012, 10:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

y si el resultado que pongo es un select de mi tabla destino chicos ayudenmeee ='(
  #20 (permalink)  
Antiguo 06/09/2012, 10:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

so? como tienes un a,b,c,d,e,f,g en un datetime? pon tus datos reales para poder ayudarte :S porque el rank como te lo dieron funciona cuando los valores de campos 2 son a,b,c,d....

digamos que tienes esto:

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

entonces usamos dense rank para sacar lo que necesitas :S, chica ayudame a ayudarte :S
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #21 (permalink)  
Antiguo 06/09/2012, 10:20
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

uhmmm que pasa si el campo que pongo en mi order by es el mismo para todos ???
  #22 (permalink)  
Antiguo 06/09/2012, 10:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

jeje haber voy a probar
  #23 (permalink)  
Antiguo 06/09/2012, 10:23
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

SI observa libras obtengo esto:

1 1 2012-09-06 11:18:49.670
1 1 2012-09-06 11:18:49.670
1 1 2012-09-06 11:18:49.670
1 1 2012-09-06 11:18:49.670
1 1 2012-09-06 11:18:49.670
1 1 2012-09-06 11:18:49.670
1 1 2012-09-06 11:18:49.670
2 2 2012-09-06 11:18:49.670
2 2 2012-09-06 11:18:49.670
  #24 (permalink)  
Antiguo 06/09/2012, 10:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

=( sera que las fechas se ordenan de igual forma que no permite incrementar el id ?? ahora como hago esto, las fechas a veces son iguales en mi base de datos
  #25 (permalink)  
Antiguo 06/09/2012, 10:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

me lleva....

try this:


select row_number() over (partition by campo1 order by campo1) as id, campo1,campo2 from #t1


best regards
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #26 (permalink)  
Antiguo 06/09/2012, 10:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

funciono no funciono dime.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #27 (permalink)  
Antiguo 06/09/2012, 11:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

creo que si funciono porque ya no has comentado nada jajajajaja
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #28 (permalink)  
Antiguo 06/09/2012, 12:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

jajaja nadaaaa me sigue dando igual ahhhhh ='( (sorry tuve que salir un momento) pls help me!!!
  #29 (permalink)  
Antiguo 06/09/2012, 12:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incrementar un campo desde un trigger

probe con esto y si me sale, tienes mas campos en tu query?

Código SQL:
Ver original
  1. DROP TABLE #t1
  2. CREATE TABLE #t1 (campo1 VARCHAR(10), campo2 datetime)
  3. INSERT INTO #t1 VALUES ('1',getdate())
  4. INSERT INTO #t1 VALUES ('1',getdate())
  5. INSERT INTO #t1 VALUES ('1',getdate())
  6. INSERT INTO #t1 VALUES ('2',getdate())
  7. INSERT INTO #t1 VALUES ('1',getdate())
  8. INSERT INTO #t1 VALUES ('2',getdate())
  9. INSERT INTO #t1 VALUES ('1',getdate())
  10. INSERT INTO #t1 VALUES ('1',getdate())
  11. INSERT INTO #t1 VALUES ('1',getdate())
  12. INSERT INTO #t1 VALUES ('3',getdate())
  13. INSERT INTO #t1 VALUES ('3',getdate())
  14. INSERT INTO #t1 VALUES ('1',getdate())
  15. INSERT INTO #t1 VALUES ('2',getdate())
  16. GO
  17.  
  18. SELECT ROW_NUMBER() OVER (partition BY campo1 ORDER BY campo1) AS id, campo1,campo2 FROM #t1
  19.  
  20. 1   1   2012-09-06 12:27:09.197
  21. 2   1   2012-09-06 12:27:09.197
  22. 3   1   2012-09-06 12:27:09.200
  23. 4   1   2012-09-06 12:27:09.200
  24. 5   1   2012-09-06 12:27:09.200
  25. 6   1   2012-09-06 12:27:09.203
  26. 7   1   2012-09-06 12:27:09.200
  27. 8   1   2012-09-06 12:27:09.203
  28. 1   2   2012-09-06 12:27:09.203
  29. 2   2   2012-09-06 12:27:09.200
  30. 3   2   2012-09-06 12:27:09.200
  31. 1   3   2012-09-06 12:27:09.203
  32. 2   3   2012-09-06 12:27:09.203

podrias poner el codigo que estas usando y los datos tal cual te los regresa tu proceso??
saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #30 (permalink)  
Antiguo 06/09/2012, 13:55
 
Fecha de Ingreso: septiembre-2010
Mensajes: 53
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Incrementar un campo desde un trigger

si ahorita mismo...

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:02.