Pour les instructions INSERT
, UPDATE
et DELETE
exécutées directement sur la base de données, la plupart des fournisseurs de base de données renvoient le nombre de lignes affectées. Pour les procédures stockées, le nombre d'enregistrements affectés est toujours -1
.
Comment obtenir le nombre d'enregistrements affectés par une procédure stockée?
Enregistrez un paramètre out pour la procédure stockée et définissez la valeur en fonction de @@ROWCOUNT
si vous utilisez SQL Server. Utilisation SQL%ROWCOUNT
_ si vous utilisez Oracle.
Notez que si vous avez plusieurs INSERT/UPDATE/DELETE
, vous aurez besoin d’une variable pour stocker le résultat de @@ROWCOUNT
pour chaque opération.
@@RowCount
vous donnera le nombre d'enregistrements affectés par une instruction SQL.
Le @@RowCount
ne fonctionne que si vous le publiez immédiatement après. Donc, si vous interceptez des erreurs, vous devez le faire sur la même ligne. Si vous le divisez, vous manquerez celui que vous avez mis en second.
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
Si vous avez plusieurs déclarations, vous devrez capturer le nombre de lignes affectées pour chacune et les additionner.
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR
Il s’est avéré pour moi que SET NOCOUNT ON
Était défini dans le script de procédure stockée (par défaut sous SQL Server Management Studio) et que SqlCommand.ExecuteNonQuery();
renvoyait toujours -1.
Je viens de le définir: SET NOCOUNT OFF
Sans avoir besoin d'utiliser @@ROWCOUNT
.
Plus de détails trouvés ici: SqlCommand.ExecuteNonQuery () renvoie -1 lors de l'insertion/de la mise à jour/de la suppression
Pour Microsoft SQL Server, vous pouvez renvoyer le @@ROWCOUNT
variable pour renvoyer le nombre de lignes affectées par la dernière instruction de la procédure stockée.