none
Obtener Claves Generadas en SQL

    Pregunta

  • Hola Buen dia.

    Estoy trabajando una aplicación MVC con Stored Procedure.

    Al momento de Guardar mi Stored de Insersión genera internamente una clave que se compone de diferentes campos, todo lo hace correctamente, se guarda el registro con la clave correctamente.

    Lo que requiero es conocer la clave una vez generada en el Stored para indicarle al usuario la clave generada.

    Espero puedan apoyarme en este caso.

    Saludos y Gracias.

    viernes, 22 de junio de 2018 13:27

Respuestas

  • Soucionado


    Stored Procedure

    proc [dbo].[Ins_Oficios]

    @Param1 varchar(15),

    @Param2 Int,

    …..

    as

           --  Obtener Clave      

    Select @NewFolio = ValorObtenido  

          

    If Not Exists (Select Folio From TAbla Where Folio = @NewFolio)                  

    begin      

           Insert Into Tabla(Campos)

           Values(Valores)        

           select  @NewFolio   as      NewFolio

    end

    else

    Select   '-1' as     NewFolio

          

    Controller

    public ActionResult Create( Vw_Oficios oficio)

    {

                if (ModelState.IsValid)

                {

                        oficio.IdUsuarioResponsable = 0;               

                    oficio.IdStatus = "I";

                        ….               

                    db.Vw_Oficios.Add(oficio);

                    db.SaveChanges();

    //Aca quiero obtener la clave generada

                return PartialView(oficio);

           var valorRetorno = oficio. NewFolio;

            }

    Model

    • Marcado como respuesta javierTR lunes, 25 de junio de 2018 17:56
    lunes, 25 de junio de 2018 17:56

Todas las respuestas

  • El SP de inserción puede también hacer un SELECT.

    Create Procedure dbo.uspInserta
    ...
    As
    Begin
        Set NoCount On;
    
        Insert Into dbo.tabla (...) Values (...);
        //Obtenga la clave primaria del registro insertado.
        //Idealmente, es un campo Identity, entonces usamos Scope_Identity().
        Declare @id int = Scope_Identity();
    
        //Ahora puede hacer un select.
        Select * From Tabla Where Id = @Id;
    End
    Go
    

    De esta manera tiene un SP que inserta pero que también selecciona, así que debe ejecutarlo con SqlCommand.ExecuteReader(), por ejemplo.  Así obtiene los datos más actualizados del registro, incluida la clave que usted menciona.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    viernes, 22 de junio de 2018 14:10
  • Gracias Jose.

    La aplicación la trabajo con ASP.NET MVC, no se si ahi pueda usar tambien SqlCOmmand.ExecuteReader()

    En mi controller lo manejo asi:

    public ActionResult Create( Vw_Oficios oficio)

    {

                if (ModelState.IsValid)

                {

                        oficio.IdUsuarioResponsable = 0;               

                    oficio.IdStatus = "I";

                        ….               

                    db.Vw_Oficios.Add(oficio);

                    db.SaveChanges();

    //Aca quiero obtener la clave generada

                return PartialView(oficio);

            }

    Y en el modelo mapeo el Sored con la Tabla Vw_Oficios

    Saludos

    viernes, 22 de junio de 2018 14:40
  • Ah ok.  Entity Framework.  EF definitivamente puede correr SP's pero no sé cómo se trabaja con este tipo de procedimientos almacenados.  Yo personalmente nunca uso EF, así que le quedo mal.  Tal vez debería usted preguntar en el foro de acceso a datos si es que no hay un foro dedicado a EF.

    Alternativamente aquí hay gente que usa siempre EF y que probablemente le podrán asistir.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    viernes, 22 de junio de 2018 14:47
  • Gracias Jose, no te preocupes, muy amable...
    viernes, 22 de junio de 2018 15:12
  • Soucionado


    Stored Procedure

    proc [dbo].[Ins_Oficios]

    @Param1 varchar(15),

    @Param2 Int,

    …..

    as

           --  Obtener Clave      

    Select @NewFolio = ValorObtenido  

          

    If Not Exists (Select Folio From TAbla Where Folio = @NewFolio)                  

    begin      

           Insert Into Tabla(Campos)

           Values(Valores)        

           select  @NewFolio   as      NewFolio

    end

    else

    Select   '-1' as     NewFolio

          

    Controller

    public ActionResult Create( Vw_Oficios oficio)

    {

                if (ModelState.IsValid)

                {

                        oficio.IdUsuarioResponsable = 0;               

                    oficio.IdStatus = "I";

                        ….               

                    db.Vw_Oficios.Add(oficio);

                    db.SaveChanges();

    //Aca quiero obtener la clave generada

                return PartialView(oficio);

           var valorRetorno = oficio. NewFolio;

            }

    Model

    • Marcado como respuesta javierTR lunes, 25 de junio de 2018 17:56
    lunes, 25 de junio de 2018 17:56