Hace poco recibí una pregunta muy interesante, ¿alguien preguntó si hay una forma de capturar los valores identity recién generados después de una inserción de varias filas en una tabla?
Respuesta: Utilizando la cláusula de OUTPUT.
SQL admite una cláusula OUTPUT, que puede utilizar para devolver información afectada por una instrucción INSERT, UPDATE, DELETE o MERGE.
Cualquier referencia a las columnas en la tabla que se está modificando debe ser calificada con la palabra clave INSERTED o DELETED, la palabra clave es solo un prefijo que especifica qué valores se deben generar.
INSERTED devuelve el valor después de UPDATE, INSERT o MERGE.
DELETED devuelve el valor antes de UPDATE, DELETE o MERGE.
El laboratorio.
Preparemos el entorno, para ello ejecute el siguiente script para crear una tabla:
Clausula OUTPUT en Declaraciones INSERT
En este ejemplo, vamos a insertar 20 registros en la tabla que hemos creado y mostramos los datos insertados al usuario.
La cláusula OUTPUT se coloca entre INSERT INTO y VALUES, tenga en cuenta que estoy usando la palabra clave INSERTED como prefijo.
Resultados:
Clausula OUTPUT En Declaraciones DELETE
En este ejemplo, vamos a eliminar todos los registros donde 'myValue_2' es mayor que 8 y mostramos los datos eliminados al usuario.
En una declaración DELETE, se agrega la cláusula OUTPUT entre la cláusula DELETE y WHERE, tenga en cuenta que estoy usando la palabra clave DELETED como prefijo.
Resultados:
Clausula OUTPUT En Declaraciones UPDATE
En este ejemplo, vamos a actualizar "myValue_1" donde "myValue_1" es igual a "myValue_2" y mostraremos los datos actualizados al usuario.
En una declaración de UPDATE , agrega la cláusula OUTPUT entre la cláusula SET y WHERE, tenga en cuenta que estoy usando ambas palabras clave, esto es muy importante ya que DELETE se usa para generar el valor anterior y INSERTED se usa para generar el valor actual.
Resultados:
Bonus: OUTPUT A una tabla temporal.
En este ejemplo, vamos a generar los datos insertados en una tabla temporal.(#MyAudit).
Resultados:
¡Diviértanse aprendiendo!
Comments