存儲過程
?【Create是創建存儲過程,alter是更改、改變存儲過程】
【在第一次寫存儲過程時用create,若修改存儲過程程序之后,則alter替換create再執行】
【在數據庫中begin ?end為大括號的意思】
?·創建存儲過程的格式:
–(procedure可簡寫為proc)proc為程序、步驟的意思。后跟存儲過程名
?create proc 存儲過程名
as
?? 代碼塊
Go
–exec為執行的意思。執行存儲過程
Exec? 存儲過程名?
———修改存儲過程
alter proc hehe?? —alter更改、改變的意思
as
select 學生學號,語文分數 from fenshu
go
exec hehe
————-查詢多個表
create proc chaxun
as
begin
select * from fenshu
select * from jiaoshi
select * from xuesheng
end
go
exec chaxun
?————–帶參數的存儲過程
create proc chucunguocheng
@yican varchar(20),??? @yican 含義為形參
@ercan varchar(20)
as
begin
?? print @yican+@ercan
end
go
exec chucunguocheng ‘你好’,’中國’
例題:
——-輸入學號,判斷學生優秀、結業、不結業(三門課及格為優秀,兩門課及格為結業)
alter proc biye
@xuehao int?? –創建輸入變量
as
begin
declare @y int
declare @s int
declare @w int
declare @zongshu int
select @y=COUNT(*) from fenshu where?學生學號=@xuehao and 語文分數>=60
select @s=COUNT(*) from fenshu where?學生學號=@xuehao and 數學分數>=60
select @w=COUNT(*) from fenshu where?學生學號=@xuehao and 英語分數>=60
set @zongshu=@y+@s+@w
if @zongshu=3
???? print ‘優秀’
if @zongshu =2
???? print ‘結業’
if @zongshu=1
???? print’不結業’
if @zongshu=0
???? print’輸入錯誤’
end
go
exec biye 1
結果為:
——–綜合練習題
(存儲過程綜合訓練)
創建一個貨物表:編號,貨物名稱,單位,價格,庫存數量,備注。(10條數據)
之后,進貨,如果已有此貨,增加數量,否則,新增入數據庫表中。
出貨,如果有人要貨,判斷數量是否充足,充足減庫存,否則告知不足。
根據名字隨時刪除數據庫中的數據,有則刪除,無則告知。
?
?
————創建數據庫及數據表,并插入數據———-
create database 筆記本
go
create table bijiben
(
?? 編號 int,
?? 名稱 nvarchar(20),
?? 備注 varchar(20),
?? 價格 int,
?? 庫存 int,
?? 單位 nvarchar(10)
)
go?????????????????????? ——–(隨機排名)——
insert into bijiben values(1,’蘋果’,’macbook’,12000,10,’美國’)
insert into bijiben values(2,’宏基’,’acer’,3500,20,’中國臺灣’)
insert into bijiben values(3,’華碩’,’asus’,3500,25,’中國’)
insert into bijiben values(4,’戴爾’,’dell’,4300,30,’美國’)
insert into bijiben values(5,’神舟’,’hass’,4000,20,’中國’)
insert into bijiben values(6,’聯想’,’lenovo’,4200,30,’中國’)
insert into bijiben values(7,’惠普’,’ph’,3600,20,’美國’)
insert into bijiben values(8,’三星’,’samsung’,3700,10,’日本’)
insert into bijiben values(9,’索尼’,’sony’,7000,10,’日本’)
insert into bijiben values(10,’東芝’,’toshiba’,3200,10,’日本’)
?
select *from bijiben
———————-進貨————————
create proc jinhuo –創建進貨存儲過程
@bianhao int,? –進貨編號
@bjbn nvarchar(20),–筆記本名
@beizhu nvarchar(20),–備注
@jiage int,–價格
@jinhuo int,–進多少臺
@danwei nvarchar(20)–單位
as
begin
?? declare @ybjbn nvarchar(20),@ykc int??–@ykc為數據中的原有的庫存數
?? select @ybjbn=count(名稱) from bijiben where?名稱=@bjbn
?? if @ybjbn=0? –當數據庫中沒有輸入的數據時
?? begin
???? insert into bijiben values(@bianhao,@bjbn,@beizhu,@jiage,@jinhuo,@danwei)
???? print’新電腦添加成功!’
?? end
?? else if @ybjbn=1? –當數據庫中有輸入的數據時
???? begin
??????? select @ykc=庫存 from bijiben where?名稱=@bjbn
??????? set @ykc=@ykc+@jinhuo
??????? update bijiben set?庫存=@ykc where?名稱=@bjbn
??????? print’該電腦庫存添加成功!’
???? end
end
go
exec jinhuo 11,’戴爾’,’dell’,4200,10,’美國’
———————-出貨————————
create proc chuhuo? –創建出貨存儲過程
@name nvarchar(20), –要出貨的筆記本名稱
@shuliang int?????? –出貨的數量
as
begin
?? declare @ygeshu int,@hgeshu int?–@ygeshu為數據庫原來的庫存,@hgeshu交易后剩余的庫存
?? select @ygeshu=庫存 from bijiben where?名稱=@name
?? if @shuliang>@ygeshu? –當出貨的數量大于庫存的數量時
???? print’對不起,庫存不足~~’
?? else???
?? begin?
???? set @hgeshu=@ygeshu-@shuliang?
???? update bijiben set?庫存=@hgeshu where?名稱=@name –修改交易后庫存數
???? print’交易成功!’
?? end
end
go
exec chuhuo ‘蘋果’,11
—————————刪除一款筆記本數據——-
create proc qingchu
@scbjbn nvarchar(20) –要刪除的筆記本的名稱
as
begin
?? declare @sgeshu int?? –要查找筆記本的個數
?? select @sgeshu=COUNT(*) from bijiben where?名稱=@scbjbn
?? if @sgeshu=1
?? begin
???? delete from bijiben where?名稱=@scbjbn
???? print’該筆記本的數據刪除成功!’
?? end
?? if @sgeshu=0
???? print’未找到該名稱的筆記本~~’
end
exec qingchu ‘蘋果’