I want to know wether or not it is possible to suppress a transaction inside a SQL stored procedure. I have the following situation in my SP (that I want to achieve):
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
so what I really want to do is that transaction B does not get enlisted in transaction A :)
You're describing an "autonomous transaction", which is a common question from people migrating from Oracle (which supports them) to MSSQL (which doesn't). This article explains the various options, which unfortunately aren't particularly attractive:
If none of those options are practical for you, the other alternative is to shift some control into an application and out of the database, but of course that just shifts the issue to another location. Still, it may be worth considering.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With