11

Desidero sapere se è possibile sopprimere una transazione all'interno di una stored procedure SQL. Ho la seguente situazione nel mio SP (che voglio raggiungere):Sopprimere la transazione nella stored procedure

WHILE TRUE 
BEGIN TRY 
    BEGIN TRANSACTION A 
    RECEIVE MESSAGE FROM SSB QUEUE WITH TIMEOUT 

    BEGIN SUPPRESS TRANSACTION 
     WHILE RECORD IN TABLE 
     BEGIN TRANSACTION B 
      DELETE RECORD FROM TABLE OUTPUT RECORD INTO D 
      SEND RECORD D TO OTHER SSB QUEUE 
     COMMIT TRANSACTION B 
    END SUPPRESS TRANSACTION 
    COMMIT TRANSACTION A 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION A 
END CATCH 

così quello che voglio fare è quella transazione B non viene arruolato nella transazione A :)

+0

Buon tempismo signore, stavo proprio per postare questo ... e sembra che stessero lavorando su un problema molto simile dato il tuo codice :) – amarsuperstar

risposta

10

Sei descrivendo una "transazione autonoma", che è una domanda comune da parte delle persone che migrano da Oracle (che li supporta) a MSSQL (che non lo fa). This article spiega le varie opzioni, che purtroppo non sono particolarmente attraenti:

  1. Un loopback server collegato
  2. Una connessione di loopback da una procedura CLR
  3. una variabile di tabella che memorizza i dati, perché non sono interessati by rollback
  4. una connessione di loopback da una stored procedure estesa (ma sono deprecati in ogni caso a favore delle procedure CLR)

Se nessuno o Se queste opzioni sono pratiche per te, l'altra alternativa è quella di spostare qualche controllo in un'applicazione e fuori dal database, ma ovviamente sposta semplicemente il problema in un'altra posizione. Tuttavia, potrebbe valerne la pena.

Problemi correlati