Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server, usando uma tabela como uma fila


A única maneira de obter um desenfileiramento de bloqueio sem pooling é WAITFOR (RECEIVE) . O que implica em filas do Service Broker, com toda a sobrecarga adicional.

Se você estiver usando tabelas comuns como filas você não poderá obter o bloqueio sem sondagem. Você deve pesquisar a fila solicitando uma operação de desenfileiramento e, se não retornar nada, hiberne e tente novamente mais tarde.

Receio discordar de Andomar aqui:enquanto sua resposta funciona como uma pergunta genérica 'há alguma linha na tabela?' quando se trata de enfileiramento, devido à natureza ocupada da sobreposição de enfileiramento/desenfileiramento, a verificação de linhas como essa é um impasse (quase) garantido sob carga. Quando se trata de usar tabelas como fila, deve-se sempre manter as operações básicas de enfileiramento/desenfileiramento e não tentar coisas extravagantes.