web-dev-qa-db-fra.com

avec (nolock) ou (nolock) - Y a-t-il une différence?

Tout est basé sur l'hypothèse que avec (nolock) est tout à fait approprié pour la situation. Il y a déjà beaucoup de questions débattant sur l'opportunité d'utiliser ou non avec (nolock).

J'ai regardé autour de moi et je n'ai pas pu trouver s'il y a une réelle différence entre l'utilisation de with(nolock):

select customer, zipcode from customers c with(nolock) 

ou juste (nolock):

select customer, zipcode from customers c (nolock) 

Y a-t-il une différence fonctionnelle entre les deux? Stylistique?
L'un est-il plus âgé que l'autre et a une chance d'être déconseillé?

41
Rob

Il n'y a pas de différence fonctionnelle, mais finalement la syntaxe sans WITH ne fonctionnera pas. Cela a été déprécié:

select customer, zipcode from customers c (nolock) 

Vous devez donc utiliser ce format:

select customer, zipcode from customers c with (nolock) 

Le fait de ne pas utiliser le mot clé WITH pour les indications de tableau est obsolète depuis au moins SQL Server 2008. Recherchez dans la rubrique suivante la phrase Specifying table hints without using the WITH keyword.:

http://msdn.Microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(Les discussions pour savoir si vous devriez utiliser nolock du tout, bien sûr, sont séparées. J'ai blogué à leur sujet ici .)

51
Aaron Bertrand

Bien que nous ne trouvions pas de différence entre (nolock) et avec (nolock) ... avec (nolock) ne fonctionnerait pas dans la version SQL Server 2000.

Et j'ai également remarqué que lorsque vous essayez d'extraire des données de serveurs liés, simplement "(nolock)" ne fonctionnera pas alors que vous devriez utiliser "avec (nolock)".

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock)

-- this will  work 
select * from server1.DB1.dbo.table1 with (nolock)
5
Vsh

Cela dépend vraiment de la version de SQL Server sur laquelle vous vous trouvez.

Consulter la dernière documentation de SQL Server 2012 indications de tablea omettre WITH est une fonctionnalité déconseillée. Ainsi, tandis que from customers c (nolock) fonctionnera probablement; vous devriez vraiment utiliser from customers c WITH (nolock)

Notez que ceci est différent de from customers nolock; où nolock servirait d'alias de table.

Fonctionnellement; ils semblent être les mêmes.

3
Jim B

J'ai essayé ceci pour un résultat de ligne de données 170000+, mais je n'ai vu aucune différence à travers le plan d'exécution de requête. Les deux fonctionnent de la même manière.

2
Avinash