46 votes

Compter le nombre de lignes supprimées dans une procédure stockée SQL Server

Dans SQL Server 2005, existe-t-il un moyen de supprimer des lignes et d'être informé du nombre de lignes supprimées ? en fait supprimé ?

Je pourrais faire un select count(*) avec les mêmes conditions, mais j'ai besoin que ce soit tout à fait digne de confiance.

Ma première idée était d'utiliser le @@ROWCOUNT mais qui n'est pas défini, par ex.

delete 
from mytable 
where datefield = '5-Oct-2008' 

select @@ROWCOUNT 

renvoie toujours un 0.

MSDN suggère le OUTPUT la construction, par exemple

delete from mytable 
where datefield = '5-Oct-2008' 
output datefield into #doomed

select count(*) 
from #doomed

cela échoue en fait avec une erreur de syntaxe.

Des idées ?

53voto

wcm Points 3898

Avez-vous essayé SET NOCOUNT OFF ?

10voto

Simon Points 3025

J'utilise @@ROWCOUNT dans ce but précis en SQL2000 sans aucun problème. Assurez-vous que vous ne réinitialisez pas ce compte par inadvertance avant de le vérifier (BOL : 'Cette variable est mise à 0 par toute instruction qui ne renvoie pas de lignes, telle qu'une instruction IF').

7voto

SELECT_UPDATE Points 124

Fais juste ça :

SET NOCOUNT off ;
SELECT @p1 = @@ROWCOUNT

où p1 est le paramètre de sortie que vous avez défini dans la procédure stockée. J'espère que cela vous aidera.

6voto

Ilya Kochetov Points 11641

Dans votre exemple @@ROWCOUNT devrait fonctionner - c'est une façon correcte de trouver un nombre de lignes supprimées. Si vous essayez de supprimer quelque chose de votre application, vous devrez utiliser la méthode suivante SET NOCOUNT ON

Selon MSDN La fonction @@ROWCOUNT est mise à jour même lorsque SET NOCOUNT est activé car SET NOCOUNT n'affecte que le message que vous recevez après l'exécution.

Donc si vous essayez de travailler avec les résultats de @@ROWCOUNT à partir, par exemple, d'ADO.NET puis SET NOCOUNT ON devrait certainement aider.

-1voto

Corey Trager Points 11334

Créer une table temporaire avec une colonne, id.

Insérez dans la table temporaire en sélectionnant les ids que vous voulez supprimer. Cela vous donne votre compte.

Supprimer de votre table où id dans (select id from temp table)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X