sql server 事務樣本

來源:互聯網
上載者:User

以前資料庫操作,我是很少用事務的,最近做一個項目,發現偶爾總是少一些資料沒有寫入到資料庫,也沒有報錯誤,看了半天,也不知道是什麼原因,後來
把一條insert語句分成兩條寫,就好了,資料就沒有丟失了,懷疑和寫入的欄位太大有關係。後來考慮還是不保險啊,就直接用事務了。

下面這個就是我寫的一個簡單的事務的例子。是單位就餐補助查詢用的,主要是根據就餐的記錄判斷餐別,對不同的人增加補助,就是一個運算而已,以前財
務用試算表也能做,看著試算表忙活半天,又心有不忍,做了個簡單的查詢,也講將就了。

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--未超過補助額度的不補
end
FROM 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
end
drop
table TempBZ
if (@@error!=0)
begin
rollback tran
return(1)
end
commit
tran
end
GO

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.