none
ExecuteScalar RRS feed

  • Pregunta

  • Hola a todos,

    puedo utilizar el metodo ExecuteScalar para ejecutar un procedimiento almacenado que haga algo como lo siguiente?

    UN INSERT

    SELECT @ID = SCOPE_IDENTITY()

    UPDATE

    UPDATE

    SELECT @ID

    Lo estoy intentando y me falla al ejecutarlo como Scalar ... por que??

    • Editado danielovik jueves, 29 de marzo de 2012 16:33
    • Cambiado Enrique M. Montejo lunes, 2 de abril de 2012 5:25 acceso a datos (De:Lenguaje VB.NET)
    jueves, 29 de marzo de 2012 16:32

Todas las respuestas

  • lo que quieres tomar es el id del ultimo select ?

    porque no lo defines como un parametro del tipo output

    [ADO.NET] – Parte 6 - Campo identity

    en el titulo "3 – Obtener Id desde Stored Procedure" del articulo explico como lo haces para retornar el id generado por el procedure

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 29 de marzo de 2012 16:51
  • Hola Leandro,

    si es como lo estaba haciendo ahora. Pero la duda mia es por que con el executescalar no me sirve ...

    En realidad hago un insert, guardo el valor del scope_identity en una variable hago par de updates y al final devuelvo el valor de la variable .. simplemente queria saber pq eso que intento no funciona ... por que la  verdad me tiene desconcertado

    jueves, 29 de marzo de 2012 16:57
  • porque el executescalar se ve afectado por la eejcuciones de varios comandos en el mismo procedure

    si en el procedure solo realizarias un select este no tendria problemas, pero al realizar varias acciones no es lo mismo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 29 de marzo de 2012 16:58
  • Te adjunto el codigo para que lo veas, solo hay un select, el ultimo, el otro select que uso recojo su valor en la variable (este no deberia afectar no?)

    -- INSERTO LA CAJA
        INSERT INTO Z1(id_establecimiento,efectivo,invitacion,tickets_anulados,total,facturas_credito,facturas_efectivo,
                       caja,id_usuario,fecha_crea)
        VALUES(@id_establecimiento,@efectivo,@invitacion,@tickets_anulados,@total,@facturas_credito,@facturas_efectivo,
               @caja,@id_usuario,@fecha_crea)    

        -- RECUPERO EL id_z1           
        SELECT @id_z1 = SCOPE_IDENTITY()

        -- ACTUALIZO EL NUM_Z1 EN ESTABLECIMIENTOS
        UPDATE Establecimientos SET num_z1 = ISNULL(num_z1,0) + 1
        WHERE id_establecimiento = @id_establecimiento    

        -- TODAS LAS VENTAS SIN id_z1 SE ADJUNTAN A ESTA CAJA
        UPDATE Ventas
        SET id_z1 = @id_z1
        WHERE id_z1 IS NULL
        AND id_usuario = @id_usuario

        -- TODAS LAS COMPRAS SIN id_z1 SE ADJUNTAN A ESTA CAJA
        UPDATE Compras
        SET id_z1 = @id_z1
        WHERE id_z1 IS NULL
        AND id_usuario = @id_usuario

    --Devuelvo el resultado  
     SELECT @id_z1

                    
    jueves, 29 de marzo de 2012 17:04
  •  se que el ultimo es un select, pero el resto que esta alli mismo afecta el resultado devuelto por el procedure

    es mas si quieres validarlo ejecuta el procedure en alguna tool de mysql veras que en medio hay resultado parciales de los update

    si defines un procedure con solo un select (sin nungun otro update en medio) veras que si funciona


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 29 de marzo de 2012 17:11
  • Ok lo probare Leandro, gracias por tu tiempo
    jueves, 29 de marzo de 2012 17:14