Si je le bloc SQL suivante (dans SQL Server 2008 R2):Une instruction SQL "DELETE" suivie d'une instruction "WHERE NOT IN" peut-elle être dans la même transaction?
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 à afficher en la deuxième suppression. Est-ce correct? Idéalement, je voudrais que tout cela soit en 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 deuxième crainte est que la deuxième instruction ne récupère pas les données supprimées en premier. Notez que le retour est là car cela fait partie d'une procédure stockée. Je ne suis pas intéressé par les suppressions en cascade ou l'adhésion, je suis quelque peu contraint à cette méthode.
Merci pour la réponse rapide, agréable d'avoir à valider sur une intuition. Testera bientôt. – Brian