亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

存儲過程,非常重要

系統 2729 0

----------------常用的系統存儲過程---------------
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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 在线观看视频亚洲 | 老司机午夜在线 | 九九久久精品这里久久网 | 中文字幕在线观看一区 | 欧美成人三级一区二区在线观看 | 在线观看中文字幕 | 美女18毛片免费视频 | 亚洲国产aaa毛片无费看 | 亚洲国产成人在线观看 | 国产精品久久久久久一区二区三区 | 久久99这里只有精品 | 欧美深夜在线 | 免费观看美女光子让男人玩 | 人人天天夜夜 | 色五月天天 | 精品久久久久久久一区二区手机版 | 亚洲精品在线观看91 | 国产真实乱人偷精品 | 伊人网狠狠干 | 午夜亚洲精品久久久久久 | 天天操天天干天天透 | 日韩欧美色视频在线观看 | 欧美精品一级毛片 | 国内精品一区二区2021在线 | 综合久久一区二区三区 | 久久9966精品国产免费 | 国产精品嫩草研究所永久网址 | 久久这里精品青草免费 | 亚洲精品国产精品国自产观看 | 中文字幕日韩女同互慰视频 | 日本粉嫩毛片视频 | 久久六视频| 亚洲人成网i8禁止 | 成人看免费一级毛片 | 亚洲国产精品一区二区久 | 91精品国产91久久 | 在线成人爽a毛片免费软件 在线成人天天鲁夜啪视频 在线成人亚洲 | 青青青爽在线视频观看大全 | 久久国产经典视频 | 久久精品94精品久久精品 | 日本最新免费二区三区 |