SQL Server存儲過程的創建
概念
存儲過程(Stored Procedure)是在數據庫系統中,一組爲了完成特定功能的SQL 語句集,它存儲在數據庫中,一次編譯後永久有效,用戶調用存儲過程並傳遞參數來執行它。
作用
優勢:響應時間上來說有優勢,可以給我們帶來運行效率提高的好處,且使用存儲過程的系統更加穩定
缺點:維護性較差,相對於簡單sql,存儲過程並沒有什麼優勢,並且在進行調試時比較困難
存儲過程和觸發器的區別
觸發器與存儲過程的主要區別在於觸發器的運行方式。存儲過程必須有用戶、應用程序或者觸發器來顯示的調用並執行,而觸發器是當特定時間出現的時候,自動執行或者激活的,與連接用數據庫中的用戶、或者應用程序無關
案例
先在數據庫創建了兩張表
1.不帶參數的存儲過程
語句
--1.不帶參數的存儲過程
--創建存儲根據名稱查詢數據(create創建,alter修改,drop刪除)
create proc cp_select_book_bybook --創建存儲過程
as
select * from Books --查詢book表
再進行調用
--調用
exec cp_select_book_bybook
調用後執行結果
2.帶輸入參數的存儲過程
語句
--2.帶輸入參數的存儲過程
--根據名稱查詢
go
create proc cp_select_book_ByName
(
@name varchar(50)
)
as
select * from Books where name like '%'+@name+'%'
再進行調用
--調用
exec cp_select_book_ByName '紅樓'
調用後執行結果
3.帶輸出參數的存儲過程
語句
--3.帶輸出參數的存儲過程
--根據名稱查詢,返回記錄,同時返回記錄數
go
create proc cp_select_books_ByNameExt
(
@name varchar(50), --多個參數用分號隔開
@recordRows int output --輸出類型
)
as
select * from Books where name like '%'+@name+'%'
select @recordRows=count(*) from Books
再進行調用
--調用
--調用
--定義一個變量,接收返回參數@recordRows的值
declare @rs int
exec cp_select_books_ByNameExt '西遊',@rs out
print '查詢的記錄數是:'+convert(varchar(5),@rs)
調用後執行結果
4.分頁的存儲過程
語句
--4.分頁的存儲過程
--根據名稱,頁碼,每頁顯示條數 --輸入參數
--返回查詢條件的總記錄數 --輸出參數
--顯示查詢結果
go
create proc cp_select_books_ByPage
(
@name varchar(50), --多個參數用分號隔開
@pageIndex int out, --頁碼
@pageSize int out, --每頁顯示條數
@recordRows int out --總記錄數
)
as
select top (@pageSize) * from Books
where id not in(
select top (@pageSize*(@pageIndex-1)) id
from Books
where name like '%西遊%'
order by id
)
and name like '%西遊%' order by id
select @recordRows=count(*) from Books
再進行調用
--調用
--定義一個變量,接收返回參數@recordRows的值
declare @rs int
exec cp_select_books_ByPage '西遊','1','5',@rs out
print @rs
調用後執行結果