2010-11-02 4 views
2

Salut tous les maîtres de Blackbelt SQL Server là-bas.SQL 2005/8 mise à jour Quirky "arts noirs"

J'ai une question simple que je dois résoudre. J'essaye de faire une mise à jour excentrique sur une table. structure spécifique de la table n'est pas important et mon problème peut essentiellement être réduit à la suivante:

update SalesTotal 
set @total = total = @total + sales, 
@flag = flag = case when @flag = 1 then 0 
        when @total > x then 1 
        else 0 end 

La question est je peux faire confiance à cette variable @total aura une nouvelle valeur à savoir. s'exécutera avant la deuxième partie de l'ensemble, ou contiendra-t-il une "ancienne" valeur (de l'assignation précédente) ou est-elle indéfinie. Je poursuis ce problème depuis un certain temps, et je ne trouve pas de solution et c'est vraiment important pour ma mise à jour (je veux mettre à jour une table en une fois). L'une des valeurs que je veux mettre à jour dépend de la valeur de l'autre (dans la même ligne), donc la seule façon de travailler dans une seule mise à jour est de savoir si cela fonctionne.

espère que vous pouvez me aider

+0

Serait-il possible de fournir la table et les variables avant et après la mise à jour? –

+1

Jeff Moden, qui a répondu ci-dessus, a écrit le meilleur article que j'ai vu sur le sujet. http://www.sqlservercentral.com/articles/T-SQL/68467/ La réponse est oui. Mais certaines conditions doivent être remplies. Lire l'article. – geoffrobinson

Répondre

13

Non, vous ne pouvez pas faire une hypothèse d'ordre impératif d'exécution. Il n'y a absolument aucune garantie quant à l'ordre des mises à jour dans la table, il n'y a absolument aucune garantie que la variable @variable soit mise à jour une fois pour chaque table SET, et la mise à jour peut bien fonctionner avec un Halloween protection.

+0

Cool article ... Jamais entendu parler de "Halloween protection". –

+0

Si vous dépréciez, expliquez pourquoi –

+0

Downvote parce que la réponse est fausse. Deux autres réponses pointent vers une solution de Jeff Moden que j'ai implémentée et que je peux certifier. –