Principales respuestas
Consecutivo

Pregunta
-
Hola tengo una consulta de un store procedure que necesito realizar de insert.
Poseo las siguientes 2 tablas.
CREATE TABLE [dbo].[Tbl_Peliculas](
[PeliCodigo] [varchar](20) NOT NULL,
[ConPelicula] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](20) NULL,
[Genero] [varchar](20) NULL,
[Anno] [int] NULLCREATE TABLE [dbo].[Tbl_Consecutivo](
[ConsecutivoCodigo] [int] IDENTITY(1,1) NOT NULL,
[Descripcion] [varchar](30) NOT NULL,
[Consecutivo] [int] NOT NULLNo se como hacer para crear un procedimiento que si por ejemplo he ingresado 5 registros en Tbl_Peliculas, en otras palabras ConPelicula es igual a 5 en este momento(el ultimo registro es 5), me aparezca en Tbl_Consecutivo.Consecutivo el valor de 5 donde la descripcion sea igual a "Peliculas", El campo ConPelicula es una identidad.
Mi problema es que al ser ConPelicula una identidad se va a ir incrementando sola conforme se ingresen valores, que procedimiento puedo realizar para que Tbl_Consecutivo.Consecutivo se vaya actualizando se manera automática?
Gracias
Respuestas
-
CREATE TRIGGER trgPeliculas_Insert ON Tbl_Peliculas AFTER INSERT AS BEGIN DECLARE @id AS INT
SET @id = inserted.ConPelicula UPDATE Tbl_Consecutivo SET Consecutivo = @id where Descripcion='Peliculas' END
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Marcado como respuesta gwebb06 lunes, 5 de agosto de 2013 2:17
Todas las respuestas
-
Para ello podrias crear un trigger de inserción sobre la tabla Tbl_Peliculas que cuando se inserte un nuevo registro en dicha tabla se realice una inserción en Tbl_Consecutivo.
el código mas o menos debería ser asi
CREATE TRIGGER trgPeliculas_Insert ON Tbl_Peliculas AFTER INSERT AS BEGIN INSERT INTO Tbl_Consecutivo (Descripcion, Consecutivo) VALUES ('Peliculas', inserted.ConPelicula) END
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
Me parece que lo que gwebb06 quiere insertar es @@Identity - el parámetro de sistema que representa el último valor del Identity de Tbl_Peliculas.
El castellano no es mi lengua materna. Discúlpenme por los errores gramaticales, y, si pueden, corríjanme en los comentarios, o por correo electrónico. ¡Muchas gracias! Blog: http://about.me/GeriReshef
-
Si tienes dos identity y uno en cada tabla no hay manera de sincronizarlos, lo que puedes hacer es usar ese valor identity cuando insertas el registros en la primera tabla por ejemplo asi
CREATE PROCEDURE MI_PROC BEGIN DECLARE @ID INT INSERT INTO Tbl_Peliculas VALUES (x,x,x,x,x) SELECT @ID=@@IDENTITY
INSERT INTO Tbl_Consecutivo VALUES (X,X,@ID) END
No se si es esto esactamente lo que quieres, pero con SELECT @@IDENTITY obtienes el campo idenity creado y asi puedes llevartelo a otra tabla sabiendo que ese identity es el de tu pelicula insertada.
Saludos.
- Editado Bud_Spencer lunes, 22 de julio de 2013 13:16 error codigo
- Propuesto como respuesta Atir58 jueves, 25 de julio de 2013 20:18
-
Que version de SQL Server usas?
A partir de la version 2008 contamos con una facilidad conocida como "composable DML", donde la salida de una sentencia DML puede usarse como entrada para una sentencia INSERT.
Ejemplo:
SET NOCOUNT ON; USE tempdb; GO DECLARE @T1 TABLE ( sk int NOT NULL IDENTITY(1, 1) PRIMARY KEY, filler CHAR(50) DEFAULT (REPLICATE('a', 50)) ); DECLARE @T2 TABLE ( consecutivo int NOT NULL, razon varchar(25) ); INSERT INTO @T2 (consecutivo, razon) SELECT consecutivo, 'Peliculas' AS razon FROM ( INSERT INTO @T1 OUTPUT INSERTED.sk DEFAULT VALUES ) AS T(consecutivo); SELECT * FROM @T1; SELECT * FROM @T2; GO
Claro esta, que si solo insertas una fila a la vez, tambien puedes tomar el valor de la funcion SCOPE_IDENTITY() e insertar el valor en la tabla [Tbl_Consecutivo]. Si usas "composable dml", puedes insertar muliples filas a la vez y todavia hacer el seguimiento de los codigos insertados sin necesidad de usar un trigger.AMB
-
-
-
Probaste lo del trigger que comenté?
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
Hola, mi pregunta con tu trigger es si ese inserta la descripcion cada vez que se ingresan valores en Tbl_Peliculas, ya que como te digo la descripcion quedara fija siempre, solo ocupo que se actualice el campo consecutivo, en ese caso seria asi?
CREATE TRIGGER trgPeliculas_Insert ON Tbl_Peliculas AFTER INSERT AS BEGIN INSERT INTO Tbl_Consecutivo (Consecutivo) VALUES (inserted.ConPelicula)
WHERE Descripcion="Peliculas" END
O se mantiene como tu dices?
Gracias.
-
Te comento, según tu diseño la tabla tbl_consecutivo tiene un campo identity que es el ConsecutivoCodigo no? Ahora bien,mi pregunta es si solamente va a existir un registro en esa tabla, el cual debe poseer el ultimo ConPelicula insertado. Me equivoco? Si solamente existirá un registro en la tabla tbl_consecutivo entonces el trigger debe quedar asi
CREATE TRIGGER trgPeliculas_Insert ON Tbl_Peliculas AFTER INSERT AS BEGIN UPDATE Tbl_Consecutivo SET Consecutivo = inserted.ConPelicula, Descripcion='Peliculas' END
O sea que actualizamos siempre el campo Consecutivo y la Descripción, aunque ésta sea siempre fija.Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
Te comento, según tu diseño la tabla tbl_consecutivo tiene un campo identity que es el ConsecutivoCodigo no? Ahora bien,mi pregunta es si solamente va a existir un registro en esa tabla, el cual debe poseer el ultimo ConPelicula insertado. Me equivoco? Si solamente existirá un registro en la tabla tbl_consecutivo entonces el trigger debe quedar asi
CREATE TRIGGER trgPeliculas_Insert ON Tbl_Peliculas AFTER INSERT AS BEGIN UPDATE Tbl_Consecutivo SET Consecutivo = inserted.ConPelicula, Descripcion='Peliculas' END
O sea que actualizamos siempre el campo Consecutivo y la Descripción, aunque ésta sea siempre fija.
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
Hola gracias por la ayuda Sergio, mira estuve intentando tu metodo y no existen 3 registros en Tbl_Consecutivo, Descripcion: 'Peliculas', 'Musica' y 'Libros'
Lo que hice fue probar tu metodo de la siguiente manera:
CREATE TRIGGER trgPeliculas_Insert
ON Tbl_Peliculas
AFTER INSERT
AS
BEGIN
UPDATE Tbl_Consecutivo
SET Consecutivo = inserted.ConPelicula
where Descripcion='Peliculas'
ENDCon el where creo que ya busca, sino podria tomar el numero de codigo del consecutivo, ahora mi duda es que me tira el siguiente error a ver si me podrías ayudar.
Msg 4104, Level 16, State 1, Procedure trgPeliculas_Insert, Line 7
The multi-part identifier "inserted.ConPelicula" could not be bound.Gracias.
-
CREATE TRIGGER trgPeliculas_Insert ON Tbl_Peliculas AFTER INSERT AS BEGIN DECLARE @id AS INT
SET @id = inserted.ConPelicula UPDATE Tbl_Consecutivo SET Consecutivo = @id where Descripcion='Peliculas' END
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Marcado como respuesta gwebb06 lunes, 5 de agosto de 2013 2:17