Comment utiliser les boucles en TSQL?
En TSQL, je voudrais changer le code suivant à partir utiliser codé en dur dhomes à l'aide d'une boucle d'optimisation. Ma tentative a échoué lors de la tentative d'ajout d'une boucle est également inclus.
Declare @dhome Tinyint, @bp smallint, @lr smallint, @q smallint
// Set @dhome = 1
While(@dhome <= 3) // My attempt to add a loop
SELECT @lr = MAX(NQdDate), @q = NQd
FROM NQdHistory
WHERE dhomeId = @dhome
GROUP BY NQdDate, NQd
SELECT @bd = COUNT(*)
FROM bdhome
WHERE NQdDate= @lr AND dhomeID= @dhome
DELETE FROM ND1 WITH(XLOCK)
WHERE dhomeID= @dhome AND NQdDate= @lr
UPDATE NQdHistory
SET Nbd = @q - @@RowCount - @bp, NBd = @bp
WHERE NQdDate= @lr AND dhomeID= @dhome
Set @dhome = @dhome +1 //My attempt to end a loop
Vous avez besoin d'une de début et de FIN en vertu de votre temps
OriginalL'auteur user1880670 | 2013-04-02
Vous devez vous connecter pour publier un commentaire.
Vous êtes sur la bonne voie. Vous êtes absent de votre début et de fin. Aussi, assurez-vous de donner
@dhome
une valeur. On dirait que vous avez commencé à et de l'avoir commentée sur votre troisième ligne:Si vous êtes familier avec le C/C#/C++, pense T-SQL de début et de Fin comme des accolades
{
et}
, si vous êtes plus familier avec VBThen
etEnd If
. Ou plus comme pascalsBegin
etEnd
. Vous avez l'idée 🙂Il n'y a pas une telle chose comme un
FOR
boucle en T-SQL. Le code de la réponse fondamentalement simule la fonctionnalité d'uneFOR
boucle, cependant.Merci pour le concours Adam!
OriginalL'auteur Adam Plocher
Manquant de début et de fin de votre temps.
WHILE (Transact-SQL)
OriginalL'auteur Jason Carter
Exemple 1
Exemple 2
Juste une autre approche si vous êtes bien à l'aide des tables temporaires.J'ai personnellement testé et cela ne provoque pas d'exception (même si table temporaire n'a pas toutes les données.)
OriginalL'auteur Sandeep