一丶 存儲過程
什麼是存儲過程:存儲過程可以說是一個記錄集吧,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就行了
存儲過程的好處:
1.由於數據庫執行動作時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。
2.一個存儲過程在程序在網絡中交互時可以替代大堆的T-SQL語句,所以也能降低網絡的通信量,提高通信速率。
3.通過存儲過程能夠使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。
存儲過程的一些基本語法:
1. 只返回單一記錄集的存儲過程
create Procedure GetUserAccount
as
select * from UserAccount
go
-------------執行上面的存儲過程----------------
exec GetUserAccount
2.沒有輸入輸出的存儲過程
create Procedure inUserAccount
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(9,9,'2013-01-02',9)
go
-------------執行上面的存儲過程----------------
exec inUserAccount
3.有返回值的存儲過程
create Procedure inUserAccountRe
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(10,10,'2013-01-02',10)
return @@rowcount
go
-------------執行上面的存儲過程----------------
exec inUserAccountRe
4.有輸入參數和輸出參數的存儲過程
5. 同時具有返回值、輸入參數、輸出參數的存儲過程
6.同時返回參數和記錄集的存儲過程
7.返回多個記錄集的存儲過程
二丶 遊標
在關係數據庫中,我們對於查詢的思考是面向集合的。
而遊標則是面向行的。
遊標的寫法:
打開遊標:
循環讀取遊標:
next:
declare test_course cursor for select *from [dbo].[Info_User] open test_course
fetch next from test_course while @@fetch_status=0 begin fetch next from test_course end
(FIRST),最後一行(LAST),下一行(NEXT),上一行(PRIOR),直接跳到某行(ABSOLUTE(n)),相對於目前跳幾行(RELATIVE(n)):
對於使用這些參數來讀取數據必須指定scroll選項:
declare test_two cursor scroll for select *from [dbo].[Info_User]
open test_two
fetch LAST from test_two
使用 FETCH 將值存入變量
fetch next from mycursor into @ID,@ExpertID,@UserID
三丶 事務
事務:保持邏輯數據一致性與可恢復性,必不可少的利器。
書面解釋:事務具有原子性,一致性,隔離性,持久性。
- 原子性:事務必須是一個自動工作的單元,要麼全部執行,要麼全部不執行。
- 一致性:事務結束的時候,所有的內部數據都是正確的。
- 隔離性:併發多個事務時,各個事務不干涉內部數據,處理的都是另外一個事務處理之前或之後的數據。
- 持久性:事務提交之後,數據是永久性的,不可再回滾
create procedure mon --創建存儲過程,定義幾個變量
@toID int, --接收轉賬的賬戶
@fromID int , --轉出自己的賬戶
@momeys money --轉賬的金額
as
begin tran --開始執行事務
update bb set moneys=moneys-@momeys where ID=@fromID -執行的第一個操作,轉賬出錢,減去轉出的金額
update bb set moneys=moneys+@momeys where ID=@toID --執行第二個操作,接受轉賬的金額,增加
if @@error<>0 --判斷如果兩條語句有任何一條出現錯誤
begin rollback tran –開始執行事務的回滾,恢復的轉賬開始之前狀態
return 0
end
go
else --如何兩條都執行成功
begin commit tran 執行這個事務的操作
return 1
end
go
存儲過程+遊標+事務