web-dev-qa-db-fra.com

Comment obtenir le nombre d'enregistrements affectés par une procédure stockée?

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?

83
dthrasher

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.

79
OMG Ponies

@@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
44
Raj More

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

29
Dude Pascalou

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.

8
Bob Mc
5
Fredou