USE [Pokus]
GO
/****** Object: StoredProcedure [dbo].[MojUpdate] Script Date: 11/25/2008 14:18:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[MojUpdate] @primaryKey int,@Ime nvarchar(50), @Prezime nvarchar(50),@Godine int
AS
BEGIN TRAN
UPDATE Osoba WITH (ROWLOCK) SET Ime = @Ime WHERE ID = @primaryKey
IF @@ERROR != 0
BEGIN
GOTO ERRORHANDLER
END
UPDATE Osoba WITH (ROWLOCK) SET Prezime= @Prezime WHERE ID = @primaryKey
IF @@ERROR != 0
BEGIN
GOTO ERRORHANDLER
END
UPDATE Osoba WITH (ROWLOCK) SET Godine= @Godine WHERE ID = @primaryKey
IF @@ERROR != 0
BEGIN
GOTO ERRORHANDLER
END
COMMIT TRAN
select* from dbo.Osoba
RETURN
ERRORHANDLER:
ROLLBACK TRAN /* ponistavas promjene koje si napravio ako ti neki od update-a ne prodje */
RAISERROR ('Ne bi išlo....',16,1) /* ova linija baca exception sa porukom u tvom programu */
select* from dbo.Osoba
U aplikaciji pozovem tu proceduru zajedno sa svim parametrima i ona uredno izvrši update željenog stupca. Međutim, kada dvojica klijenata istovremeno updajte-aju isti zapis uopće mi se ne detektira data concurrency. Točnije, svima se izmjene prihvate bez da su vidjeli zadnje stvarno stanje zapisa. Jednostavno, samo prepisuju jedan preko drugog.
Ono što bi ja htio jest da mi netko opiše kako da ovu proceduru proširim tako da nakon što dodam @timestamp da mogu provjeriti timestamp u vrijeme update-a te prema tome detektirati da li je bilo izmjena. Kako da to isprogramiram u stored proceduri?
Isto tako, kako da u stored proceduri provjerim da zapis u međuvremenu nije izbrisan?
Hvala