El problema
Supongamos que queremos actualizar un registro en la BD mediante el uso de un stored procedure y necesitamos saber si o no se realizó el update.. y claro, para esto el servidor de BD debe de responder con 0 de false o 1 de true..
La solución
Esto se logra utilizando el método rowcount que retorna el número de filas afectadas y se puede utilizar a partir de versiones de MS SQL Server 2005 en delante.
Yo escribí un stored procedure bastante sencillo el cual recibe 2 parámetros.. @Id que será el registro que buscaré para actualizar y @valor que será el nuevo valor que asignaré a un determinado campo de la tabla.. entonces vamos al código.
USE [Schema].[DATABASE] GO CREATE PROCEDURE [Schema].[spElStoredDePrueba] @Id AS INT, @valor AS INT AS BEGIN DECLARE @resultado BIT UPDATE tabla SET campo = @valor WHERE id = @Id IF @@rowcount = 0 BEGIN SET @resultado = 0 END ELSE BEGIN SET @resultado = 1 END RETURN (@resultado) END GO |
Lo que hice fue crear una variable llamada @resultado y su valor depende de sí o no se hizo la actualización (utilizando rowcount).. al final lo único que hago es hacer return de @resultado y listo, ahora el servidor responderá un valor booleano.
Sé que es muy difícil que un update retorne un error y no se ejecute, pero en sistemas de alta disponibilidad hay que evitar cualquier tipo de errores y aunque se tengan validaciones previas, nunca estará de más asegurarse.
Happy Coding!