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


86

Pour INSERT, UPDATEet les DELETEinstructions SQL exécutées directement sur la base de données, la plupart des fournisseurs de bases 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?


1
Set No Count était aussi mon problème. Pour tester, exécutez votre procédure stockée dans Management Studio et voyez si vous obtenez des décomptes, si vous le faites, puis assurez-vous d'avoir une variable de sortie.
user2624356

Réponses:


80

Enregistrez un paramètre out pour la procédure stockée et définissez la valeur en fonction de l' @@ROWCOUNTutilisation de SQL Server. À utiliser SQL%ROWCOUNTsi vous utilisez Oracle.

Notez que si vous en avez plusieurs INSERT/UPDATE/DELETE, vous aurez besoin d'une variable pour stocker le résultat de @@ROWCOUNTchaque opération.


46

@@RowCount vous donnera le nombre d'enregistrements affectés par une instruction SQL.

Le @@RowCountne fonctionne que si vous émettez 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 placerez en second.

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR

Si vous avez plusieurs instructions, vous devrez capturer le nombre de lignes affectées pour chacune et les additionner.

SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR

33

Il s'avère que pour moi, cela a SET NOCOUNT ONété défini dans le script de procédure stockée (par défaut sur SQL Server Management Studio) et a SqlCommand.ExecuteNonQuery();toujours renvoyé -1.

Je viens de le déclencher: SET NOCOUNT OFFsans avoir besoin de l'utiliser @@ROWCOUNT.

Plus de détails trouvés ici: SqlCommand.ExecuteNonQuery () renvoie -1 lors de l'insertion / mise à jour / suppression


Cela fonctionne pour moi. Mon proc stocké est juste une simple instruction d'insertion, et cela semble fonctionner. Merci!
Harvey Darvey

Merci! Bon travail sur la référence.
Leo Gurdian

8

Pour Microsoft SQL Server, vous pouvez renvoyer la @@ROWCOUNTvariable pour renvoyer le nombre de lignes affectées par la dernière instruction de la procédure stockée.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.