Todo depende de la capa de acceso a los datos de su cliente. Muchos marcos ORM se basan en consultar explícitamente SCOPE_IDENTITY durante la operación de inserción.
Si tiene un control total sobre la capa de acceso a datos, entonces es sin duda mejor devolver SCOPE_IDENTITY() como un parámetro de salida. Envolver el retorno en un conjunto de resultados agrega sobrecarga de metadatos innecesarios para describir el conjunto de resultados y complica el código para procesar el resultado de las solicitudes.
Si prefiere un retorno conjunto de resultados, a continuación, de nuevo es discutible mejor utilizar la cláusula OUTPUT:
INSERT INTO MyTable (col1, col2, col3)
OUTPUT INSERTED.id, col1, col2, col3
VALUES (@col1, @col2, @col3);
De esta manera se puede obtener la fila insertada toda espalda, incluyendo columnas predeterminadas y calculados, y se obtiene un conjunto de resultados que contiene una fila por cada fila insertada, esto funciona correctamente con inserciones por lotes orientadas a conjuntos.
En general, no puedo ver una sola caja al devolver SCOPE_IDENTITY()
como resultado, un conjunto sería una buena práctica.
Buen punto al devolver varias filas si hubo varias inserciones. Tal vez Gbn te ganó a eso, pero el tuyo fue más completo. En mi caso particular, no estoy usando un ORM y (por ahora) no insertaré múltiples registros a la vez. –
@Remus: dijiste: "En general, no puedo ver un solo caso al devolver SCOPE_IDENTITY() como resultado el conjunto sería una buena práctica". Entonces, ¿de qué otra forma podría hacerse? ¿Estás implicando que el uso general de SCOPE_IDENTITY() es una mala práctica? ¿En qué sentido, por favor? – Fandango68
@ Fernando68: Estoy diciendo que debería obtenerlo como un parámetro de salida, no como resultado establecer –