Bastante simple pregunta. En SQL 2008, si tengo un procedimiento almacenado (ver a continuación), ¿corro el riesgo de una condición de carrera entre las dos primeras declaraciones o el procedimiento almacenado bloquea las cosas que toca como lo hacen las transacciones?¿Los procedimientos almacenados bloquean las tablas/filas?
ALTER PROCEDURE [dbo].[usp_SetAssignedTo]
-- Add the parameters for the stored procedure here
@Server varchar(50),
@User varchar(50),
@UserPool varchar(50)
AS
BEGIN
SET NOCOUNT ON;
Declare @ServerUser varchar(50)
-- Find a Free record
SELECT top 1 @ServerUser = UserName
from ServerLoginUsers
where AssignedTo is null and [TsServer] = @Server
--Set the free record to the user
Update ServerLoginUsers
set AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
where [TsServer] = @Server and UserName = @ServerUser
--report record back if it was updated. Null if it was not available.
select *
from ServerLoginUsers
where [TsServer] = @Server
and UserName = @ServerUser
and AssignedTo = @User
END
instrucción de salida debe ser puesto después de que el conjunto de la sintaxis correcta –
utilicé el primer ejemplo pero obtuve el error 'Solo se puede especificar el bloqueo READPAST en los niveles de aislamiento READ COMMITTED o REPEATABLE READ. cuando lo ejecuté. –
Ah OK, soltar HOLDLOCK luego – gbn