2009-07-29 2 views
75

Pour INSERT, UPDATE et DELETE Instructions 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 puis-je obtenir le nombre d'enregistrements affectés par une procédure stockée?

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

+1

Set DENOMBREMENT était mon problème aussi bien. Pour tester, exécutez votre procédure stockée dans le studio de gestion et voyez si vous obtenez des comptes, si vous le faites, alors assurez-vous que vous avez une sortie variable. – user2624356

Répondre

74

inscrire un paramètre pour la procédure stockée et définissez la valeur basée sur @@ROWCOUNT si vous utilisez SQL Server. Utilisez 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.

8

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

41

@@RowCount vous donnera le nombre d'enregistrements affectés par une instruction SQL. Le @@RowCount fonctionne uniquement si vous l'émettez immédiatement après. Donc, si vous piègez des erreurs, vous devez le faire sur la même ligne. Si vous le divisez, vous manquerez le suivant.

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

Si vous avez plusieurs déclarations, vous devrez saisir le nombre de lignes affectées pour chacun d'eux et les additionner.

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

AVERTISSEMENT: @@ROWCOUNT peut retourner fausses données si la table modifiée a déclencheurs attaché à lui!

Le @@ROWCOUNT renverra le nombre d'enregistrements affectés par le TRIGGER, pas l'instruction réelle!

+8

Il s'avère que ce n'est pas vrai: http://stackoverflow.com/questions/7005225/sql-server-does-trigger-affects-rowcount – Tao

25

Il s'avère pour moi que SET NOCOUNT ON a été défini dans le script de procédure stockée (par défaut sur SQL Server Management Studio) et SqlCommand.ExecuteNonQuery(); toujours retourné -1. Je viens juste de l'éteindre: SET NOCOUNT OFF sans avoir besoin d'utiliser @@ROWCOUNT

Plus de détails disponibles ici: SqlCommand.ExecuteNonQuery() returns -1 when doing Insert/Update/Delete

+0

Cela fonctionne pour moi. Mon proc stocké est juste un simple instructions d'insertion, et il semble fonctionner. Merci! –

+0

Merci! Bon travail sur la référence. –

Questions connexes