none
Obtener el valor de la clave insertada RRS feed

  • Pregunta

  • hola estoy trabajando con un paquete de SSIS donde uso un Origen OLE DB en el cual pongo como comando sql lo siguiente:

    declare @idNuevo int

    insert into address_external (address_type_id)

    values (0)

     select @idNuevo = scope_identity()

    lo que quiero lograr es insertar un dato en la tabla y que me devuelva el valor de la nueva clave (idNuevo). Aparentemente esto funciona(al menos cuando consulto la base por medio del Managment Studio), pero cuando voy a la configuracion del Origen OLE DB en la parte columns no me muestra nada y me da el error:

    TÍTULO: Microsoft Visual Studio
    ------------------------------

    El componente indicó las siguientes advertencias:

    Error en Tarea Flujo de datos [Origen de OLE DB [1]]: El comando SQL no devolvió ninguna información de columna.


    Elija Aceptar si desea continuar con la operación.
    Elija Cancelar si desea detener la operación.

    ------------------------------
    BOTONES:

    Aceptar
    Cancelar
    ------------------------------

    que puedo hacer para arreglar esto ?

     

    viernes, 3 de junio de 2011 2:14

Respuestas

  • Es que esa instrucción no devuelve ningún resulset, simplemente asigna el valor de SCOPE_IDENTITY() a una variable. Si esa script lo pones dentro de un componente de origen de datos, deberías hacer algo como


    INSERT INTO address_external (address_type_id) VALUES (0)

    SELECT SCOPE_IDENTITY() AS valor

     

    Aunque no creo que esta sea la mejor forma de hacerlo. Yo lo que haría sería crear un procedimiento almacenado que devolviera ese valor como parámetro de salida, y en el paquete asignar ese parámetro de salida a una variable. Tienes múltiples ejemplos de cómo hacer esto si buscas un poco, como por ejemplo el que muestran en http://www.sqlis.com/sqlis/post/The-Execute-SQL-Task.aspx


    • Propuesto como respuesta Carlos Sacristan viernes, 3 de junio de 2011 7:05
    • Marcado como respuesta Andres Rocha C miércoles, 8 de junio de 2011 0:04
    viernes, 3 de junio de 2011 7:05