sql事務例項

2021-05-22 18:39:07 字數 1563 閱讀 9244

下面是乙個簡單的事務的例項。是單位就餐補助查詢用的,主要是根據就餐的記錄判斷餐別,對不同的人增加補助,就是乙個運算而已

create procedure [dbo].[addbzmoney] as---確定就餐型別和補助金額

begin

begin tran

insert into sumbz(卡號,日期,餐別,就餐金額)--彙總每日就餐明細

select detail.卡號, detail.就餐日期, dbo.getbztype(detail.就餐時間) as 餐別, --查詢就餐金額

sum(detail.消費金額) as 消費金額

from detail inner join

bztype on dbo.getbztype(detail.就餐時間) = bztype.餐別

where (detail.狀態 = 0)

group by detail.就餐日期, dbo.getbztype(detail.就餐時間), detail.卡號

update detail set 狀態=1 where 狀態=0--更新補助狀態

create table tempbz--建立中間表,確定補助的金額

(id int,

bzmoney money

)insert into tempbz

select sumbz.id,

case

when sumbz.就餐金額 >= bztype.補助標準 and people.加班補助=1 and sumbz.餐別='晚餐'then bztype.補助標準--晚餐有加班補助的,超過4元補4元

when sumbz.就餐金額 >= bztype.補助標準 and people.加班補助=0 and sumbz.餐別='晚餐'then 0--晚餐無加班補助的,補0元

when sumbz.就餐金額 >= bztype.補助標準 and sumbz.餐別='午餐' then bztype.補助標準--午餐全部超過3元的,補3元

when  sumbz.餐別='早餐' then bztype.補助標準--早餐不補

when sumbz.就餐金額 < bztype.補助標準 then 0--未超過補助額度的不補

endfrom sumbz inner join

bztype on sumbz.餐別 = bztype.餐別 inner join people on people.卡號=sumbz.卡號

declare @i int

set @i=(select min(id) from tempbz)

while @i<=(select max(id) from tempbz)

begin

update sumbz set 補助金額=(select bzmoney from tempbz where id=@i) where id=@i

set @i=@i+1

enddrop table tempbz

if (@@error!=0)

begin

rollback tran

return(1)

endcommit tran

endgo

SQL server 事務例項

簡單的sqlserver事務例項 執行sql 組合操作a 操作b,只有ab都執行成功時才提交事務,否則回滾事務。測試資料表 1.資料表a create table a a1 varchar 10 a2 varchar 10 insert into a a1,a2 values 00001 souls...

PHP操作MySQL事務例項

一般來說,事務都應該具備acid特徵。所謂acid是atomic 原子性 consistent 一致性 isolated 隔離性 durable 持續性 四個詞的首字母所寫,下面以 銀行轉帳 為例來分別說明一下它們的含義 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說...

PHP使用Mysql事務例項解析

資料庫連線 conn mysql connect localhost root mysql select db test conn mysql query set names gbk 支援事務的表必須是innodb型別 一段事務中只能出現一次 mysql query start transactio...