1 創建存儲過程
1.1 創建簡單的存儲過程
創建語句:
create proc usp_helloworld as begin print 'Hello World' end
創建完后,調用語句格式 exec + 存儲過程名:exec usp_helloworld
執行結果:

1.2 創建帶參數的存儲過程
語句:
create proc usp_book @name nvarchar(50), @author nvarchar(50) as begin select * from book where name=@name and author=@author end
表中的數據:

調用存儲過程,因為定義兩個參數,在調用的時候需要給參數賦值。下面兩種方法都行:
(1)exec usp_book "神雕俠侶","金庸"
(2)exec usp_book @name="神雕俠侶",@author="金庸"
執行結果:

1.3 帶默認值的存儲過程
創建語句:
create proc usp_select_hero1 @heroname nvarchar(50) = '溫青青' as begin select * from hero where hero=@heroname end
表中數據:

因為參數已經給了默認值,在調用存儲過程的時候,可以不指定參數。
如:直接調用:exec usp_select_hero1 結果如下:

也可以重新給參數賦值如:exec usp_select_hero1 @heroname='無塵' 結果如下:

1.4 創建帶輸出參數的存儲過程output關鍵字
創建語句:
create proc usp_output @bookname nvarchar(50), @recordCount int output --關鍵字代表輸出參數 as begin select * from hero where bookname=@bookname --把查詢的記錄條數賦值給變量@recordCount set @recordCount = (select count(*) from hero where bookname=@bookname) end
調用帶有參數的存儲過程,需要定義變量,並把變量傳遞給參數,如下:
declare @num int exec usp_output @bookname='書劍恩仇錄',@recordCount=@num output select @num as 記錄條數
結果:

2 使用存儲過程實現分頁
語句:
create proc usp_fenye @pagesize int=3, --每頁記錄的條數 @index int=1, --當前查看第幾頁的內容 @recordcount int output, --總的條數 @pagecount int output --總的頁數 as begin --分頁 select t.id, t.bookname, t.hero from (select *,rn=row_number() over(order by id asc) from hero) as t where t.rn between (@index-1) * @pagesize + 1 and @pagesize * @index --計算總的條數 set @recordcount =( select count(*) from hero) --計算總的頁數 set @pagecount=ceiling(@recordcount * 1.0 / @pagesize) --ceiling向上取整 end
執行:
declare @tiaoshu int declare @yeshu int exec usp_fenye @pagesize=5,@index =3,@recordcount=@tiaoshu output,@pagecount=@yeshu output select @tiaoshu as 總的條數 select @yeshu as 總的頁數
結果:

