2010-07-25 5 views
1

Juste curieux de savoir si c'est une façon fiable de faire ce qui suit: J'ai besoin d'obtenir de la valeur et de la mettre à jour de manière optimale.C# et SQL Server 2005: Valeur de retour et mise à jour en un seul lot

SELECT X FROM Y //will it be returned if executed in one batch? 
UPDATE Y SET X... 

Exécuté en tant que lecteur? Je ne suis pas sûr qu'il reviendra s'il y a le statut UPDATE. Et une question supplémentaire, que se passe-t-il si j'ai besoin de retourner vrai ou faux (ou toute autre paire de valeurs) selon si oui ou non une déclaration réussit?

+0

Il sera plus facile de donner une réponse si vous montrez le SQL spécifique que vous voulez exécuter, ou un exemple expurgé de celui-ci, plutôt que du pseudo-code. De plus, quel serveur de base de données ciblez-vous? Oracle, SQL Server, MySQL? =) – Rob

+0

Voulez-vous retourner les données que vous avez déjà mises à jour ou qui ont été mises à jour? Ou juste d'autres données? –

Répondre

0

Votre question est un peu claire. Si la question est sur la façon de mettre à jour et de sélectionner dans une déclaration que de voir la réponse de gbn.

Si la question porte sur la façon d'exécuter deux déclarations différentes, que vous pouvez utiliser bloc BEGIN-end:

begin 

    select * from x 

    update y set a = ... 

end 

Vous pouvez définir CommandType au texte et utiliser la méthode ExecuteReader de la commande. Les deux instructions seront exécutées et vous obtiendrez le résultat de l'instruction select.

+0

Une question: pourquoi utiliser le bloc d'extrémité? Je ne vois pas de différence. C'est seulement pour le rendre "atomique"? – Thomas

+0

Oui, c'est pour le rendre atomique. Aussi je ne suis pas sûr que cela fonctionnerait sans bloc de début/fin (mais peut-être que je le confond avec une autre base de données). –

2
UPDATE Y 
OUTPUT --use this 
SET X... 

La clause OUTPUT permet cela pour SQL Server 2005+ (je devine avec C#)

Questions connexes