Al momento de utilizar estas dos variables del lenguaje al mismo tiempo, nos pasa que una “pisa” a la otra. Es decir, si ejecuto un UPDATE y quiero saber la cantidad de filas modificadas con @@RowCount y más abajo quiero capturar el error (si lo hubiera), el @@Error tomaria el error de la asignacion del @@RowCount a una variable. Ej.:
Declare @NumeroError int
Declare @Modif int
UPDATE Clientes
SET
Codigo = TMP.Cod_Cte,
Descripcion = TMP.Nom_Ent
FROM T_NvosCtes TMP
INNER JOIN Clientes Cte ON Cte.Codigo = TMP.Cod_Cte
SET @Modif = @@RowCount
SET @NumeroError = @@Error
Al hacer el primer select (el de filas modoficadas) ya el @@Error captura esta asignación y debolvera siempre 0 ya que no hubo error en la asignación.
Para resolver esto cambiamos la forma de asignar los valores a las variables, utilizando un SELECT:
Select @Altas = @@RowCount
@NumeroError = @@Error