Domanda

Considera il seguente SQL:

BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

INSERT Bands
    (  Name  )
SELECT 'Depeche Mode'
UNION
SELECT 'Arcade Fire'

    -- I've indented the inner transaction to make it clearer.

    BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT *
      FROM Bands

    COMMIT

-- What is the isolation level right here?

UPDATE Bands
   SET Name = 'Modest Mouse'
 WHERE Name = 'Oddest House'

COMMIT

In breve, iniziamo una transazione e impostiamo il suo livello di isolamento su LEGGI IMPEGNATO . Quindi eseguiamo alcuni SQL casuali e avviamo un'altra transazione nidificata. In questa transazione cambiamo il livello di isolamento in LEGGI UNCOMMITTED . Commettiamo quindi quella transazione e torniamo all'altra.

Ora, suppongo che dopo il commit interno, il livello di isolamento ritorna su LEGGI IMPEGNATO . È corretto?

È stato utile?

Soluzione

Non penso sia corretto.

Fare riferimento alle osservazioni qui: Imposta transazione

  

Solo uno del livello di isolamento   le opzioni possono essere impostate alla volta e   rimane impostato per quella connessione fino al   è stato esplicitamente modificato.

Altri suggerimenti

Tu [Bob Probst] hai ragione. È interessante notare che, secondo la documentazione che hai collegato:

  

Se si emette SET TRANSACTION ISOLATION LEVEL in una procedura memorizzata o in un trigger, quando l'oggetto restituisce il controllo il livello di isolamento viene ripristinato al livello in vigore quando l'oggetto è stato invocato. Ad esempio, se si imposta REPEATABLE READ in un batch e il batch chiama quindi una procedura memorizzata che imposta il livello di isolamento su SERIALIZZABILE, l'impostazione del livello di isolamento torna su REPEATABLE READ quando la procedura memorizzata restituisce il controllo al batch.

Quindi, la linea di fondo qui è che SET TRANSACTION ISOLATION LEVEL ha affinità di procedura , non affinità di transazione (come avevo pensato).

Impressionante!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top