黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

存儲過程,非常重要

系統(tǒng) 2877 0

----------------常用的系統(tǒng)存儲過程---------------
execute sp_databases--查看服務(wù)器里的所有數(shù)據(jù)庫
exec sp_renamedb NetBarDB,abc--重命名數(shù)據(jù)庫
exec sp_tables--查詢出當(dāng)前環(huán)境下的對象列表
exec sp_columns cardInfo--查詢指定表中列的信息

------------存儲過程語法------------------
create procedure 存儲過程名稱?? --procedure可以用proc代替
?? ?@參數(shù)1 數(shù)據(jù)類型=默認(rèn)值 output,--output表示輸出參數(shù),注意:定義存儲過程參數(shù)不需要declare
?? ?@參數(shù)2 數(shù)據(jù)類型,?? ??? ??? ??? ?--沒output表示輸入?yún)?shù)
?? ?.......
as
?? ?--存儲過程主體部分(T-SQL語句)
go

--------------簡單查詢的存儲過程--------------------
create proc proc_selectPCinfo
as
?? ?select * from PCInfo
go
exec proc_selectPCinfo --執(zhí)行存儲過程

--------------無參的存儲過程--------------------------
--完成:PCuse=0的計算機(jī)信息
create proc proc_selectPCinfo2
as
?? ?select * from PCInfo where PCUse=0
go
exec proc_selectPCinfo2

-----------------帶輸入?yún)?shù)的存儲過程------------------
--完成:根據(jù)參數(shù)值來查詢不同狀態(tài)的計算機(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ù)的存儲過程(建議使用第二種)
exec proc_selectPCinfoByPCuse 1
exec proc_selectPCinfoByPCuse @PCuse=1
--注意:
exec proc_selectPCinfoByPCuse --出錯,因為沒提供參數(shù)值

-------------------輸入?yún)?shù)有默認(rèn)值的存儲過程-----------------------
--特點:當(dāng)調(diào)用存儲過程沒有提供參數(shù)值時,參數(shù)會使用默認(rèn)值
--完成:改寫上面的存儲過程,當(dāng)執(zhí)行存儲過程沒提供參數(shù)值,就會查詢空閑狀態(tài)的計算機(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ù)的存儲過程------------------
--完成:根據(jù)卡號查余額,然后判斷是否能上機(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ù)的存儲過程
declare @money int
exec proc_getBalanceByCardNumber @CardNum='023-001',@balance=@money output --調(diào)用存儲過程時,輸出參數(shù)一定要加output
if(@money>=2)
begin
?? ?print '可以上機(jī)'
end
else
begin
?? ?print '余額不足2元,請先充值'
end

--刪除存儲過程
if exists(select * from sysobjects where name='proc_getBalanceByCardNumber')
begin
?? ?drop proc proc_getBalanceByCardNumber
end

--------------------return的使用-----------------------
--完成:獲取新增電腦的編號
--方法一:使用輸出參數(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ī)')
?? ?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ī)')
?? ?return @@identity
go
declare @id int
exec @id=proc_getAddPCid
print convert(varchar,@id)
--注意:使用return只能返回一個結(jié)果,使用輸出參數(shù)可以返回多個結(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 '卡號不存在!'
?? ??? ?return
?? ?end
?? ?if(@cardBalance<=0)
?? ?begin
?? ??? ?print '充值金額不大于0,無法充值!'
?? ??? ?return
?? ?end
?? ?update cardInfo set CardBalance=CardBalance+@cardBalance
?? ?where CardNumber=@cardNum
?? ?declare @errorNum int--聲明一個變量,存儲錯誤值,用來判斷sql語句是否執(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('卡號不存在!',16,1) with log--with log用于將錯誤寫入系統(tǒng)日志中(我的電腦->管理->系統(tǒng)工具->事件查看器->Windows日志->應(yīng)用程序)
?? ??? ?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語句是否執(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號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論