Inquiridor
Travar transação com subquery

Pergunta
-
Boa tarde Amigos,
Estou com uma problema e uma dúvida, vou descrever qual é o cenário:
Cenário:
Tenho uma tabela com alguns números disponiveis para serem utilizados na minha aplicação, chamo uma procedure para me retornar um próximo número disponível.
Problema:
Essa é uma aplicação comercial e é acessada pelo menos por 300 maquinas (instâncias diferentes de banco) e o que está acontecendo é que quando duas ou mais instâncias chamam essa procedure o número retornado é o mesmo para as duas.
Dúvida:
Gostaria de saber se existe alguma forma de travar a transação, e deixar a próxima instância fazer a seleção somente após a anterior, o script está dessa forma:
DECLARE @NUMERO VARCHAR(10) BEGIN TRAN SELECT TOP 1 @NUMERO = LTRIM(RTRIM(NUMERO)) FROM TAB_NUMERO WHERE UTILIZADO = 'N' ORDER BY NUMERO SET @NUMERO = ISNULL(@NUMERO, -1) IF @NUMERO > 1 BEGIN UPDATE TAB_NUMERO SET UTILIZADO = 'P' WHERE NUMERO = @NUMERO END COMMIT TRAN SELECT @NUMERO [NUMERO]
Sei que se eu fizer um update ou insert o banco efetua o lock automático, mas isso funcionario se eu fizesse update ou insert com subquery?
Criei o seguinte script:BEGIN TRAN DECLARE @TABLE TABLE(NN VARCHAR(10)) UPDATE TAB_NUMERO SET UTILIZADO = 'P' WHERE NUMERO = (SELECT TOP 1 LTRIM(RTRIM(NUMERO)) FROM TAB_NUMERO WHERE UTILIZADO = 'N' ORDER BY NUMERO) INSERT INTO @TABLE (NN) SELECT TOP 1 LTRIM(RTRIM(NUMERO)) FROM TAB_NUMERO WHERE UTILIZADO = 'N' ORDER BY NUMERO COMMIT TRAN SELECT NN [NUMERO] FROM @TABLE
Obrigado à todos.