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

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