PROBLEMAS con @@ROWCOUNT

17/07/2006 - 16:23 por Hugo Gsell | Informe spam
TENGO UN SERIO PROBLEMA .
tengo un procedimiento almacenado de actualización (ver abajo) que me
devuelve en un parametro de salida (NroRegsModificados) con la cantidad de
registros afectados por la transacción (en este caso en realidad simpre
debería ser 0 ó 1 ya que idpaso es clave).
Sin embargo, el procedimiento siempre me devuelve 1 aunque idpaso no
exista!!! es decir que no modificó ningún registro.
probando modificque el procedimiento almacenado para probarlo desde el mismo
sql... y si no graba nada me imrpima ese mensaje... y le mando actulizar un
registro que NO EXISTE y nunca muestra 'el error'
Que esta mal?

Hugo A. Gsell
Sgo del Estero
Argentina

CREATE PROCEDURE [dbo].[ActualizaPasos]
@pIdPaso smallint ,
@pDescripcion varchar(50),
@NroRegsModificados smallint output
AS
SET NOCOUNT OFF
DECLARE @error int
SET transaction isolation level SERIALIZABLE

BEGIN TRANSACTION
SET NOCOUNT ON;
UPDATE Pasos
SET Descripcion=@pDescripcion
WHERE IdPaso=@pIdPaso

SET @error = @@error
SET @NroRegsModificados=@@ROWCOUNT
IF @@ROWCOUNT=0
PRINT 'ERROR 0 REGISTROS GRABADOS'
IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
RETURN @error
GO
 

Leer las respuestas

#1 Antonio Soto
17/07/2006 - 16:49 | Informe spam
Hola Hugo,

Tanto @@error, como @@rowcount devuelven siempre el valor de la anterior
instrucción ejecutada, por lo que en tu código @@rowcount está devolviendo
el valor del SET @error.. Cambia tus dos SET por select @error =
@@error, @NroRegsModificados=@@ROWCOUNT y verás como funciona


Antonio Soto
Solid Quality Learning
http://www.sqlu.com
Disclaimer: This communication is an original work and represents my sole
views on the subject. It does not represent the views of any other person
or entity either by inference or direct reference.
"Hugo Gsell" escribió en el mensaje
news:
TENGO UN SERIO PROBLEMA .
tengo un procedimiento almacenado de actualización (ver abajo) que me
devuelve en un parametro de salida (NroRegsModificados) con la cantidad de
registros afectados por la transacción (en este caso en realidad simpre
debería ser 0 ó 1 ya que idpaso es clave).
Sin embargo, el procedimiento siempre me devuelve 1 aunque idpaso no
exista!!! es decir que no modificó ningún registro.
probando modificque el procedimiento almacenado para probarlo desde el
mismo sql... y si no graba nada me imrpima ese mensaje... y le mando
actulizar un registro que NO EXISTE y nunca muestra 'el error'
Que esta mal?

Hugo A. Gsell
Sgo del Estero
Argentina

CREATE PROCEDURE [dbo].[ActualizaPasos]
@pIdPaso smallint ,
@pDescripcion varchar(50),
@NroRegsModificados smallint output
AS
SET NOCOUNT OFF
DECLARE @error int
SET transaction isolation level SERIALIZABLE

BEGIN TRANSACTION
SET NOCOUNT ON;
UPDATE Pasos
SET Descripcion=@pDescripcion
WHERE IdPaso=@pIdPaso

SET @error = @@error
SET @NroRegsModificados=@@ROWCOUNT
IF @@ROWCOUNT=0
PRINT 'ERROR 0 REGISTROS GRABADOS'
IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
RETURN @error
GO


Preguntas similares