知方可補不(bu)足(zu)~說說吧(ba)!timestamp有什么(me)用(yong)?
最(zui)近(jin)開發了(le)(le)一(yi)個(ge)(ge)公安機關的(de)分布式系統(tong)(tong),在(zai)系統(tong)(tong)中(zhong)要求若(ruo)干個(ge)(ge)人同(tong)時可以對數據庫進行讀寫(xie)操作。這時出現了(le)(le)一(yi)些聯想問題(ti):
1 當多(duo)于1人的(de)用戶對(dui)同(tong)一條(tiao)記錄進行寫(xie)操作時,先寫(xie)入的(de)用戶的(de)數(shu)據必(bi)定會(hui)被后寫(xie)入的(de)用戶的(de)數(shu)據override掉,這個(ge)問題(ti)如何(he)解決?
2 希望看比(bi)某一條記(ji)(ji)錄更(geng)新(xin)的(在這條記(ji)(ji)錄修改后,才進行修改和添加(jia)的)所有記(ji)(ji)錄,如何實現(ID不連續(xu),記(ji)(ji)錄時(shi)常有更(geng)新(xin))?
3 希望看(kan)到本行(xing)記錄(lu)的最新版本,如果有新版本就讀到數據集,如果沒有就不讀到數據集?(行(xing)版本戳)
ok,I answer questions which I put questions to .
1 當多于(yu)1人的(de)用戶對同(tong)一條記錄進行寫(xie)(xie)操(cao)作時,先(xian)寫(xie)(xie)入的(de)用戶的(de)數據(ju)必定會被后寫(xie)(xie)入的(de)用戶的(de)數據(ju)override掉,解決(jue)方法(fa):
create proc recordByjobID @jobID char(20) ,@stamp timestamp output as begin declare @stamp rowversion --行版本類(lei)型 select @stamp=stamp from a where [jobID]=@jobID end -- 將取出(chu)的stamp以參(can)數的形式傳送給(gei)updateRecord過程,去更新(xin)記錄(lu)。 create proc updateRecord @jobID char(20) , @stamp timestamp, @content varchar(200) as begin -- waitfor delay '00:00:15' --等(deng)待時間 DECLARE @Count Int SELECT @Count = COUNT(*) FROM [a] WHERE jobID= @jobID IF @Count = 1 BEGIN Update [a] Set [content] = @content Where stamp=@stamp and jobID=@jobID END ELSE BEGIN INSERT INTO [a] (jobID,content) VALUES (@jobid,@content) END END
2 希望看比某一條(tiao)記錄更新(xin)(xin)的(de)(在這條(tiao)記錄修(xiu)改后(hou),才進行修(xiu)改和(he)添加的(de))所有記錄,如(ru)何實現(ID不連續,記錄時(shi)常有更新(xin)(xin))解決方(fang)法:
create displayLastBystamp @stamp timestamp as begin select cardid,jobid,gid,stamp from a where stamp>@stamp end 3 希(xi)望看到本(ben)(ben)行記錄的最新版(ban)本(ben)(ben),如(ru)果有新版(ban)本(ben)(ben)就讀到數據集(ji),如(ru)果沒有就不讀到數據集(ji)。解(jie)決方法: create displayLastBystampJobId @stamp timestamp,jobid varchar(20) as begin select cardid,jobid,gid,stamp from a where jobID=@jobID and stamp>@stamp end