La première déclaration ne se verrouille pas quoi que ce soit, alors que le second fait. Quand je l'ai testé ce tout à l'heure sur SQL Server 2005, dans
select * from table1 nolock where column1 > 10 --INCORRECT
"nolock" est devenu l'alias, dans cette requête, de table1.
select * from table1 with(nolock) where column1 > 10
exécute la fonctionnalité nolock souhaitée. Sceptique? Dans une fenêtre distincte, exécutez
BEGIN TRANSACTION
UPDATE tabl1
set SomeColumn = 'x' + SomeColumn
pour verrouiller la table, puis essayez chaque instruction de verrouillage dans sa propre fenêtre. Le premier va se bloquer, attendant que le verrou soit libéré, et le second sera exécuté immédiatement (et affichera les "données corrompues"). Ne pas oublier d'émettre
ROLLBACK
lorsque vous avez terminé.
ok donc avec (nolock) est devenu la nouvelle syntaxe depuis sql 2005, bien que nolock fonctionne toujours. est-ce que c'est ça? – seenasan
oui, fonctionne encore sans le "avec", mais il a été déprécié, ce qui signifie qu'il ne fonctionnera pas de cette façon dans une version à un moment donné dans le futur (pourrait être la prochaine version, pourrait être la suivante, pourrait être 10 à partir de maintenant) ... – chadhoc
aussi sur l'insertion, mise à jour devrait avec (nolock) être utilisé là aussi comme une norme de programmation? – seenasan