2008-11-18 3 views
3

J'exécute plusieurs requêtes discrètes dans un seul lot sur SQL Server. Par exemple:Récupération de "messages de sortie" à partir de la commande SQL par lots (SQL Server)

 
update tableX set colA = 'freedom'; 

select lastName from customers; 

insert into tableY (a,b,c) values (x,y,z); 

Maintenant, je veux saisir le résultat dans un DataSet (de l'instruction select) qui est assez facile à faire ... mais comment puis-je capturer aussi la réponse « méta » de cette commande similaire à la façon dont l'Analyseur de requêtes/SQL Mgt studio ne quand il affiche le « Messages » et Prèsentoir quelque chose de similaire à:

 
(1 Row affected) 
(2 Rows Updated) 

Répondre

3

Ma suggestion serait d'utiliser la variable @@ rowcount pour cela. En général, quand je fais ce genre de commandes, si je veux piéger à la fois l'erreur potentielle et les lignes affectées, je

declare @rowsAffected int, @error int 

select * from sometable 
    select @rowsAffected = @@rowcount, @error = @@error 

if @@error <> 0 goto errorCleanup 
1

Nick a raison de suggérer @@ROWCOUNT - en fait, comme une question de routine J'utilise toujours SET NOCOUNT ON, qui a un (petit) avantage de performance - mais plus important encore, ce détail est un détail d'implémentation - donc le code ne devrait pas se soucier ...

Si vous voulez retourner une valeur (comme un nombre des lignes mises à jour), utilisez l'un des éléments suivants:

  • valeur de retour
  • paramètre de sortie
  • instruction SELECT

Le dernier a le plus frais généraux