[ itf @ 25.11.2008. 13:49 ] @
U C++u koristim stored proceduru za update podataka na SQL server. Ona izgleda ovako: Code: 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 |