none
Consecutivo RRS feed

  • 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] NULL

    CREATE TABLE [dbo].[Tbl_Consecutivo](
    [ConsecutivoCodigo] [int] IDENTITY(1,1) NOT NULL,
    [Descripcion] [varchar](30) NOT NULL,
    [Consecutivo] [int] NOT NULL

    No 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

    lunes, 22 de julio de 2013 4:13

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
    viernes, 26 de julio de 2013 11:56

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

    lunes, 22 de julio de 2013 5:31
  • 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

    lunes, 22 de julio de 2013 11:15
  • 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
    lunes, 22 de julio de 2013 13:15
  • 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

    Some guidelines for posting questions...

    lunes, 22 de julio de 2013 14:32
  • Hola gracias por responder, la identidad es solo en ConPelicula, solo quiero que se sincronize el registro Tbl_Consecutivo.Consecutivo con el ultimo valor de ConPelicula insertado.
    lunes, 22 de julio de 2013 14:54
  • Probaste lo del trigger que comenté?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 22 de julio de 2013 14:59
  • 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.

    lunes, 22 de julio de 2013 15:11
  • 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

    • Marcado como respuesta gwebb06 miércoles, 24 de julio de 2013 16:13
    • Desmarcado como respuesta gwebb06 jueves, 25 de julio de 2013 23:53
    lunes, 22 de julio de 2013 15:20
  • 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'
     END

    Con 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.

    jueves, 25 de julio de 2013 23:56
  • 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
    viernes, 26 de julio de 2013 11:56