Commit Insert but Hold Lock
This isn't really a reliable queue pattern


You have a long running transaction that depends on the client processsing time
A client time out won't release locks because connection pooling and you don't have SET XACT_ABORT


Typically, you'd set a row as "In Processing" with an UPDATE using ROWLOCK, HOLDLOCK, READPAST hints. This allows multiple clients to not block each other and you can 

Then, when the client has done it's stuff, you can DELETE the row in a separate transaction. Or, flag "Has Error" on the same row as needed.

See these for more:


https://stackoverflow.com/a/940001/27535 (SO)
FIFO queue table for multiple workers in SQL Server