2010-10-30 7 views
9

J'ai trouvé des questions similaires avec des réponses correctes. Mais ils sont un peu compliqués pour moi. Je veux juste une simple déclaration de base.Mettre à jour et sélectionner dans une requête

Je:

string sql = "UPDATE tblPopUp 
       SET PopUp = 'False' 
       WHERE DisplayNo = 1" 

... et:

string sql1 = "SELECT Period 
       FROM tblPopUp 
       WHERE DisplayNo = 1" 

Comment puis-je les combiner?

Répondre

13
UPDATE tblPopUp 
SET PopUp = 'False', Period = Period 
OUTPUT DELETED.Period 
WHERE DisplayNo = 1 

Pour plus d'informations sur la clause SORTIE s'il vous plaît vérifier this post.

+0

Je pense que cela seulement fonctionne dans certaines versions de SQL, pas du tout dans MySQL, mais j'ai été capable d'accomplir quelque chose comme ça avec SQL User Variables et multi-requêtes –

+1

c'est génial - m'a sauvé une tonne de temps et de taper. marquer mes enregistrements en cours de traitement par une instance spécifique de mon application de charge équilibrée dans une instruction unique qui maintient un verrou sur les enregistrements ... '' ' Mise à jour top (5) [testdb_chetan]. [dbo]. [ tbl_ngic_recordings_master] Définir ProcessingFlag = 'InProcessByInstance', ProcessAttempts = ProcessAttempts + 1 OUTPUT INSERTED. * Où ProcessingFlag = 'Non traité' '' ' – Wjdavis5

2

Vous ne pouvez pas.

Il n'y a pas de convention dans une instruction SQL UPDATE pour renvoyer des données. Et vice versa - une instruction SELECT n'écrit pas d'informations dans une table.

Si vous avez trouvé des questions/réponses qui vous semblent similaires à celles que vous voulez, veuillez fournir des liens.

+0

Matin. Je connais cette question MySQL, mais SQl Server a quelque chose de ce genre. http://msdn.microsoft.com/en-us/library/ms177564.aspx Ne sais pas à propos de MySQL ... –

+0

@astander: Presque le temps de coucher ici :) Pas de clause OUTPUT ou similaire dont je suis au courant dans MySQL - Oracle (et PostgreSQL?) A la clause RETURNING qui est très similaire à la clause OUTPUT de TSQL. Aucun n'est ANSI, à ma connaissance. –

+0

Aggreed. C'est DB spécifique X- (.Bonne nuit.Voir plus tard ... –

-1

Essayez cette

UPDATE tblPopUp 
      SET PopUp = 'False' 
      WHERE DisplayNo = '1' 
(
SELECT Period 
      FROM tblPopUp 
      WHERE DisplayNo = '1' 
) 
0

La façon correcte de faire cela (maintenant pour MySQL 5+), serait avec une procédure stockée.

Questions connexes