定義
存儲過程是一個預編譯的sql語句 ,編譯後可多次使用。
優勢:響應時間上來說有優勢,可以給我們帶來運行效率提高的好處,且使用存儲過程的系統更加穩定
缺點:維護性較差,相對於簡單sql,存儲過程並沒有什麼優勢,並且在進行調試時比較困難
作用
可以提高運行效率,並且使用存儲過程的系統更穩定。
更多的可以參考 【隨風飄揚中】的 存儲過程的作用和意義
使用範圍
當一個業務需要操作多個表時可以使用存儲過程來提升效率
怎麼操作
創建無參無輸出存儲過程
--創建存儲過程
create proc cp_books
as
--操作語句
select * from books
--調用不帶參的存儲過程
exec cp_books
創建有參無輸出存儲過程
--多個參數使用逗號隔開
create proc cp_books
(
@name nvarchar(20)
)
as
--操作語句
select * from books where name like '%'+@name+'%'
--調用帶參的存儲過程
--多個參數使用逗號隔開不需要小括號包裹
exec cp_books @name='aa'
創建無參有輸出存儲過程
--創建存儲過程--
create proc cp_books
(
@mycount int output --輸出參數需要output
)
as
--操作語句
select @mycount=count(*) from books
--調用有輸出的存儲過程
--先定義一個變量進行接收
declare @mycount int
set @mycount= exec cp_books
print @mycount
創建有參有輸出存儲過程
--創建存儲過程--
create proc cp_books
(
@name nvarchar(20)
@mycount int output --輸出參數需要output
)
as
--操作語句
select @mycount=count(*) from books
select * from books where name like '%'+@name+'%'
--調用有輸出的存儲過程
--先定義一個變量進行接收
declare @mycount int
set @mycount= exec cp_books
print @mycount
判斷存儲過程是否存在刪除存儲過程
-- 判斷要創建的存儲過程名是否存在
if exists (select * from dbo.sysobjects
where id = object_id(N'[dbo].[存儲過程名]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 刪除存儲過程
drop procedure [dbo].[存儲過程名]
儲存過程分頁
--存儲過程
--創建帶輸入參數的存儲過程
go
create proc cp_select_name
(
@name nvarchar(20),
@pageindex int,
@pagecount int
)
as
--offset A rows ,將前A條記錄捨去,fetch next B rows only ,向後在讀取B條數據。
--此方法只適用於2012及以上版本
select * from Book where name like '%'+@name+'%' order by ID offset @pagecount*@pageindex rows fetch next @pagecount rows only
exec cp_select_name @name='js',@pageindex=2,@pagecount=10