----------------常用的系統存儲過程---------------
execute sp_databases--查看服務器里的所有數據庫
exec sp_renamedb NetBarDB,abc--重命名數據庫
exec sp_tables--查詢出當前環境下的對象列表
exec sp_columns cardInfo--查詢指定表中列的信息
------------存儲過程語法------------------
create procedure 存儲過程名稱?? --procedure可以用proc代替
?? ?@參數1 數據類型=默認值 output,--output表示輸出參數,注意:定義存儲過程參數不需要declare
?? ?@參數2 數據類型,?? ??? ??? ??? ?--沒output表示輸入參數
?? ?.......
as
?? ?--存儲過程主體部分(T-SQL語句)
go
--------------簡單查詢的存儲過程--------------------
create proc proc_selectPCinfo
as
?? ?select * from PCInfo
go
exec proc_selectPCinfo --執行存儲過程
--------------無參的存儲過程--------------------------
--完成:PCuse=0的計算機信息
create proc proc_selectPCinfo2
as
?? ?select * from PCInfo where PCUse=0
go
exec proc_selectPCinfo2
-----------------帶輸入參數的存儲過程------------------
--完成:根據參數值來查詢不同狀態的計算機信息
create? proc proc_selectPCinfoByPCuse
?? ?@PCuse int
as
?? ?select *,
?? ??? ?case
?? ??? ?when PCUse=0 then '空閑'
?? ??? ?when PCUse=1 then '正在使用'
?? ??? ?end as 使用狀態
?? ?from PCInfo where PCUse=@PCuse
go
--執行帶參數的存儲過程(建議使用第二種)
exec proc_selectPCinfoByPCuse 1
exec proc_selectPCinfoByPCuse @PCuse=1
--注意:
exec proc_selectPCinfoByPCuse --出錯,因為沒提供參數值
-------------------輸入參數有默認值的存儲過程-----------------------
--特點:當調用存儲過程沒有提供參數值時,參數會使用默認值
--完成:改寫上面的存儲過程,當執行存儲過程沒提供參數值,就會查詢空閑狀態的計算機信息
create? proc proc_selectPCinfoByPCuseHasDefault
?? ?@PCuse int=0 --有默認值的參數
as
?? ?select *,
?? ??? ?case
?? ??? ?when PCUse=0 then '空閑'
?? ??? ?when PCUse=1 then '正在使用'
?? ??? ?end as 使用狀態
?? ?from PCInfo where PCUse=@PCuse
go
exec proc_selectPCinfoByPCuseHasDefault?? --查PCuse為0(沒提供參數值就使用默認值)
exec proc_selectPCinfoByPCuseHasDefault 1 --查PCuse為1
-------------帶輸出參數的存儲過程------------------
--完成:根據卡號查余額,然后判斷是否能上機
create proc proc_getBalanceByCardNumber
?? ?@CardNum varchar(20),
?? ?@balance int output--輸出參數
as?? ?
?? ?select @balance=CardBalance from cardInfo where CardNumber=@CardNum
go
--調用帶輸出參數的存儲過程
declare @money int
exec proc_getBalanceByCardNumber @CardNum='023-001',@balance=@money output --調用存儲過程時,輸出參數一定要加output
if(@money>=2)
begin
?? ?print '可以上機'
end
else
begin
?? ?print '余額不足2元,請先充值'
end
--刪除存儲過程
if exists(select * from sysobjects where name='proc_getBalanceByCardNumber')
begin
?? ?drop proc proc_getBalanceByCardNumber
end
--------------------return的使用-----------------------
--完成:獲取新增電腦的編號
--方法一:使用輸出參數
if exists(select * from sysobjects where name='proc_getAddPCid')
begin
?? ?drop proc proc_getAddPCid
end
go
create proc proc_getAddPCid
?? ?@pcid int output
as
?? ?insert into PCInfo values(0,'新增的計算機')
?? ?set @pcid=@@IDENTITY
go
declare @id int
exec proc_getAddPCid @pcid=@id output
print convert(varchar,@id)
--方法二:使用return
if exists(select * from sysobjects where name='proc_getAddPCid')
begin
?? ?drop proc proc_getAddPCid
end
go
create proc proc_getAddPCid
as
?? ?insert into PCInfo values(0,'新增的計算機')
?? ?return @@identity
go
declare @id int
exec @id=proc_getAddPCid
print convert(varchar,@id)
--注意:使用return只能返回一個結果,使用輸出參數可以返回多個結果
-----------------return---------------------
--完成:充值
if exists(select * from sysobjects where name='proc_addBalance')
begin
?? ?drop proc proc_addBalance
end
go
create proc proc_addBalance
?? ?@cardNum nvarchar(50),
?? ?@cardBalance int
as
?? ?if not exists(select * from cardInfo where CardNumber=@cardNum)
?? ?begin
?? ??? ?print '卡號不存在!'
?? ??? ?return
?? ?end
?? ?if(@cardBalance<=0)
?? ?begin
?? ??? ?print '充值金額不大于0,無法充值!'
?? ??? ?return
?? ?end
?? ?update cardInfo set CardBalance=CardBalance+@cardBalance
?? ?where CardNumber=@cardNum
?? ?declare @errorNum int--聲明一個變量,存儲錯誤值,用來判斷sql語句是否執行成功
?? ?set @errorNum=0
?? ?set @errorNum = @@ERROR
?? ?if(@errorNum>0)
?? ?begin
?? ??? ?print '充值失敗!'
?? ?end
?? ?else
?? ?begin
?? ??? ?print '充值成功!'
?? ?end
go
exec proc_addBalance @cardNum='023-001',@cardBalance=10
----------------raiserror的使用-----------------------
--完成:完善上例
if exists(select * from sysobjects where name='proc_addBalance')
begin
?? ?drop proc proc_addBalance
end
go
create proc proc_addBalance
?? ?@cardNum nvarchar(50),
?? ?@cardBalance int
as
?? ?if not exists(select * from cardInfo where CardNumber=@cardNum)
?? ?begin
?? ??? ?raiserror('卡號不存在!',16,1) with log--with log用于將錯誤寫入系統日志中(我的電腦->管理->系統工具->事件查看器->Windows日志->應用程序)
?? ??? ?print convert(varchar,@@error)--輸出50000,原因:@@error的值會受raiserror的影響
?? ??? ?return
?? ?end
?? ?if(@cardBalance<=0)
?? ?begin
?? ??? ?raiserror('充值金額不大于0,無法充值!',16,1)
?? ??? ?return
?? ?end
?? ?update cardInfo set CardBalance=CardBalance+@cardBalance
?? ?where CardNumber=@cardNum
?? ?declare @errorNum int--聲明一個變量,存儲錯誤值,用來判斷sql語句是否執行成功
?? ?set @errorNum=0
?? ?set @errorNum = @@ERROR
?? ?if(@errorNum>0)
?? ?begin
?? ??? ?raiserror('充值失敗!',16,1)
?? ?end
?? ?else
?? ?begin
?? ??? ?raiserror('充值成功!',11,1)
?? ?end
go
exec proc_addBalance @cardNum='023-101',@cardBalance=10
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
