J'ai le texte SQL "SELECT * FROM TABLE1 WITH (NOLOCK)".Comment utilisez-vous NOLOCK avec TADOQuery et TADOTable?
Deux questions:
Comment puis-je faire mon TADOQuery utiliser l'indicateur NOLOCK sans avoir à inclure dans le texte SQL? J'ai littéralement des milliers de TADOQuery avec leur SQL construit dynamiquement, et il serait difficile d'ajouter WITH (NOLOCK) à chacun d'entre eux, pour ne pas mentionner que je l'utilise avec des plates-formes de base de données autres que MSSQL. Y a-t-il une propriété TADOQuery?
Comment obtenir la même chose avec un TADOTable? TADOTable n'a pas de SQL, alors comment lui dire d'utiliser l'indice NOLOCK?
Merci
Oui. Et connaissez-vous les implications? Si ce n'est pas le niveau par défaut, il y a une bonne raison. Les transactions et les verrous sont là pour protéger votre intégrité des données. Avant de jeter ça, j'y penserais à deux fois - il devrait y avoir une très bonne raison. –
Cette déclaration s'applique-t-elle uniquement à cette session (c'est-à-dire que je dois le faire chaque fois que je lance mon application)? Ou est-il défini sur la base de données elle-même en permanence? Cela affecte-t-il uniquement les instructions SELECT ou toutes les instructions SQL? –
C'est pour la session seulement. Cela affectera toutes les instructions DML, par exemple toute clause where "lira" la base de données. Votre requête peut (et va ...) renvoie des résultats qui n'ont jamais existé dans la base de données. Sauf si votre base de données est en lecture seule, vous cherchez des problèmes. En utilisant un indice NOLOCK pour une requête donnée, sachant quoi faire est ok. L'utiliser pour une session entière à moins que la base de données ne soit en lecture seule est très dangereux. La performance n'est pas tout. L'utilisateur préfère généralement le résultat correct, même s'il est plus lent, que le mauvais résultat plus rapidement. –