J'ai une transaction d'insertion en cours d'exécution qui insère des données dans plusieurs tables liées.Quel SQL lire TRANSACTION ISOLATION LEVEL est-ce que je veux pour insérer longtemps?
Lorsque cette insertion est en cours d'exécution, je ne peux pas effectuer un select * à partir de MainTable. La sélection tourne simplement ses roues jusqu'à ce que l'insertion soit terminée.
Je vais effectuer plusieurs de ces insertions au même temps/chevauchement. Pour vérifier que les informations ne sont pas insérées deux fois, j'interroge d'abord le MainTable pour voir si une entrée est là et que son bit traité n'est pas défini.
Lors de la transaction d'insertion, elle retourne le bit traité MainTable pour cette ligne.
Je dois donc pouvoir lire la table et savoir si la ligne spécifique est en cours de mise à jour.
Des idées sur la façon de configurer cela dans Microsoft SQL 2005? Je regarde la documentation SET TRANSACTION ISOLATION LEVEL.
Merci,
Keith
EDIT: Je ne pense pas que le même lot d'insertion se produira en même temps. Ce sont des fichiers binaires en cours de traitement et leurs données insérées dans la base de données. Je vérifie que le fichier n'a pas été traité avant d'analyser et d'insérer les données. Lorsque je fais la vérification, si le fichier n'a pas été vu avant je fais une insertion rapide dans le MainTable avec le bit traité défini faux.
Existe-t-il un moyen de verrouiller la ligne mise à jour au lieu de la table entière?
DJ, Le problème que je verrais avec votre exemple est que le ProcessedBit est réglé vrai avant que le long processus est RAN. Si le long processus des erreurs, alors il me reste le ProcessedBit = true. Merci pour votre aide. Keith –
Ouais, vous devez avoir un champ de statut à la place - avec trois valeurs: Non traité, en cours de traitement, et traité –