sirve que para example ejemplos sql sql-server tsql rowcount nocount

sql - que - ¿Desea desactivar NOCOUNT o RETURN @@ ROWCOUNT?



sql select @@ rowcount (5)

Estoy creando un procedimiento almacenado en la base de datos de Sql Server 2008. Quiero devolver el número de filas afectadas. ¿Cuál es la mejor opción? ¿ESTABLECER NOCOUNT OFF o RETURN @@ ROWCOUNT?

ALTER PROCEDURE [dbo].[MembersActivateAccount] @MemberId uniqueidentifier AS BEGIN -- Should I use this? SET NOCOUNT OFF; UPDATE [dbo].Members SET accountActive = 1 WHERE id = @MemberId; --Or should I SET NOCOUNT ON and use the following line instead? --return @@ROWCOUNT; END

Sé que ambos funcionan, pero ¿cuál es la mejor opción y por qué?

Después de algunos intentos, llego a la conclusión de que SET NOCOUNT está DESACTIVADO de forma predeterminada dentro de los procedimientos almacenados. ¿Es posible cambiar este comportamiento dentro de mi base de datos?


No utilice RETURN para los valores. Por convenio, RETORNO de los procedimientos almacenados es para códigos de error, 0 significa que no hay error y no 0 significa algún tipo de problema. Si necesita recuperar datos, la forma adecuada de hacerlo es con un parámetro OUTPUT. Es un poco contraintuitivo basado en el uso de la devolución en otros idiomas.


Razones para usar SET NOCOUNT ON / OFF:

Para controlar el desbordamiento de pila al insertar filas en cualquier tabla. Pasar los mensajes T-Sql mientras se ejecutan las consultas o consultas anidadas. Para mostrar o ver las últimas consultas ejecutadas. Para obtener información sobre la última escalada de registros.


Sé que tener SET NOCOUNT ON haría que un DataAdapter piense que hubo un conflicto de concurrencia.

Puedes leerlo en MSDN . Si DataAdapters va a utilizar el código, obviamente no use SET NOCOUNT ON.

Parece que SqlCommand también tiene este comportamiento , que supongo que es la razón por la que el DataAdapter tiene un problema (ya que bajo el capó usará un objeto Command).


Utilice @@ RowCount. Es explícito y transparente, está totalmente controlado por su código en lugar de por un comportamiento incorporado.

La opción NOCOUNT se puede configurar manualmente para que se establezca de manera predeterminada en ON (Optons> Query Execution> SQL Server> Advanced). Si lo configura de esta manera pero luego declara SET NOCOUNT OFF en su procedimiento almacenado, entonces la configuración local tendrá prioridad.


¿Por qué usamos SET NOCOUNT on / off ---

Respuesta: podemos entender esto siguiendo los pasos

paso 1: ejecute la consulta "Seleccionar top 10 * del nombre de la tabla".

paso 2: ventana de mensaje abierta muestra un mensaje "10 filas afectadas". Crea gastos generales adicionales y extiende nuestro tiempo de ejecución.

Paso 3: para superar estos gastos adicionales, usamos SET NOCOUNT ON. Si está activado, nunca contará el número de retornos de filas, sino que siembra los comandos de un mensaje que se completaron con éxito.

Paso 4: de forma predeterminada, NOCOUNT está ENCENDIDO, luego cuenta el número de filas devueltas, por lo que sugiero que se desactive durante la creación de nuevos procedimientos para obtener un mejor rendimiento del servidor de base de datos.