Całkiem proste pytanie. W SQL 2008, jeśli mam procedurę przechowywaną (patrz niżej), czy ryzykuje się stan wyścigu między dwoma pierwszymi stwierdzeniami, czy procedura przechowywana blokuje rzeczy, które dotyka, tak jak robią to transakcje?Czy procedury przechowywane blokują tabele/wiersze?
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
oświadczenie wyjście musi zostać wprowadzone po zbiorze do poprawnej składni –
kiedyś swój pierwszy przykład ale dostałem błąd "Możesz określić blokadę READPAST na poziomie izolacji" ZAPOZNAJ ZOBOWIĄZANE lub POWTÓRZYJ CZYTAJ CZYTANIE ", gdy ją uruchomiłem. –
Ah OK, upuść thw HOLDLOCK następnie – gbn