déclaration SQL peut une « DELETE » suivi d'un « OU PAS » déclaration dans une même transaction?

StackOverflow https://stackoverflow.com/questions/5858685

Question

Si je le bloc SQL suivante (dans SQL Server 2008 R2):

BEGIN
    BEGIN TRAN

    DELETE FROM dbo.fooData
    WHERE LastUpdate < DateAdd(hour, -1,GETUTCDATE())

    COMMIT

    BEGIN TRAN

    DELETE FROM dbo.barData
    WHERE SessionID NOT IN (SELECT sub.SessionId FROM dbo.fooData sub)

    COMMIT
    RETURN 0
END

Je suppose que je dois faire une COMMIT explicite entre les déclarations pour que les données supprimées de fooData à apparaître dans la deuxième suppression. Est-ce correct? Idéalement, je veux que tout cela dans une seule transaction. Exemple:

BEGIN
    BEGIN TRAN

    DELETE FROM dbo.fooData
    WHERE LastUpdate < DateAdd(hour, -1,GETUTCDATE())

    DELETE FROM dbo.barData
    WHERE SessionID NOT IN (SELECT sub.SessionId FROM dbo.fooData sub)

    COMMIT
    RETURN 0
END

Ma crainte est que la deuxième déclaration ne détectera pas les premières de données supprimées. Note, le retour est là parce que cela fait partie d'une procédure stockée. Je ne suis pas intéressé par les suppressions en cascade ou de se joindre, je suis un peu contraint à cette méthode.

Était-ce utile?

La solution

La même transaction / séance peut le voir de propres changements. D'autres séances ne verront pas ces transactions non validées de cette Session

Donc, votre 2ème forme (une transaction plus large) est sécurité à utiliser.

Autres conseils

Vous pouvez utiliser le second exemple.

Parce que vous êtes dans la même transaction, vous accédez aux informations des opérations précédentes.

L'isolement dit que autres opérations ne peuvent pas accéder aux données qui ont été modifiées au cours d'une transaction qui n'a pas encore terminé. La question de l'isolement se produit dans le cas de transactions simultanées (multiples opérations effectuées en même temps). mais vous êtes int la même transaction, de sorte que la transaction peut et accéder au résultat de la première opération.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top