2017-10-18 1 views
0

C'est une question plutôt basique et quelque peu étrange, je suppose. Supposons que j'ai une procédure stockée qui contient une instruction INSERT (ou MERGE), suivie par une instruction SELECT. Puis-je toujours supposer que l'instruction INSERT a fini d'écrire/de valider des données lorsque j'exécute SELECT?SELECT après INSERT ne sélectionne pas les lignes récemment ajoutées

Faut-il s'attendre à ce que l'instruction SELECT (parfois) ne sélectionne pas toutes les lignes insérées récemment? Si oui, quelles options dois-je avoir pour que l'instruction SELECT attende la fin de l'instruction INSERT (dans une procédure stockée) ou inclut des données éventuellement non validées?

+3

Oui, vous pouvez supposer que lorsqu'une instruction se termine alors toutes les données sont correctement mis dans la base de données. Ceci est lié aux propriétés ACID des bases de données et à l'une des raisons pour lesquelles les bases de données relationnelles sont une technologie populaire. –

+1

Juste pour ajouter, si vous voulez vous assurer que les données sont correctement insérées, utilisez simplement une variable et réglez-la sur 1 après insertion, puis vérifiez si la valeur de la variable est 1, puis utilisez l'instruction select. –

+0

@GordonLinoff Alors, que dois-je faire si ce n'est pas le cas? – lith

Répondre

0

S'il se trouve dans la même session, il le verra, qu'il soit validé ou non, sauf s'il a été annulé.

Une fois validées, les autres sessions peuvent le voir.

0

Si « select » est de session différente et que vous voulez lire les données UNCOMMITED

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
+0

D'après ce que j'ai lu cela a beaucoup d'effets secondaires que je ne veux pas. J'ai besoin de résultats reproductibles. – lith