Pour INSERT
, UPDATE
et les 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 obtenir le nombre d'enregistrements affectés par une procédure stockée?
Réponses:
Enregistrez un paramètre out pour la procédure stockée et définissez la valeur en fonction de l'
@@ROWCOUNT
utilisation de SQL Server. À utiliserSQL%ROWCOUNT
si 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@@ROWCOUNT
chaque opération.la source
@@RowCount
vous donnera le nombre d'enregistrements affectés par une instruction SQL.Le
@@RowCount
ne 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
la source
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 aSqlCommand.ExecuteNonQuery();
toujours renvoyé -1.Je viens de le déclencher:
SET NOCOUNT OFF
sans avoir besoin de l'utiliser@@ROWCOUNT
.Plus de détails trouvés ici: SqlCommand.ExecuteNonQuery () renvoie -1 lors de l'insertion / mise à jour / suppression
la source
Pour Microsoft SQL Server, vous pouvez renvoyer la
@@ROWCOUNT
variable pour renvoyer le nombre de lignes affectées par la dernière instruction de la procédure stockée.la source
@@ ROWCOUNT
la source
ATTENTION:
@@ROWCOUNT
peut renvoyer de fausses données si la table en cours de modification est associée à des déclencheurs !Le
@@ROWCOUNT
renverra le nombre d'enregistrements affectés par le TRIGGER, pas l'instruction réelle!la source