-------------------------------------------------------------存儲過程---------------------------------------------------
存儲過程創建時就在服務器上編譯了,所以比執行單個sql語句快
用exec 系統存儲過程名稱就可以調用,常用的有:
sp_renamedb '原數據庫名','修改后的名'?????????????? ?作用 修改數據庫名稱 在master下用(這個功能比較實用)
sp_tables??????????????????????????????? --當前數據庫中而已查詢的對象的列表
sp_helpindex stuMarks? 查看stuMarks表的索引
Exec xp_cmdshell 'mkdir d:\bank',no_output 創建文件夾
存儲過程里也可以 調用視圖
用戶自定義存儲過程,
1:不帶參數的存儲過程:
create? exec proc 或者procedure? 存儲過程名 (過程名最好是proc_名稱為好)
as
(可以在里面定義一些局部變量)
sql語句,任何都行
go
調用
Exce 存儲過程名
2:帶輸入參數的存儲過程:(每個參數 后面要有逗號)
create proc proc_name
(參數) @ mark1 int?=60? (=60表示給了一個默認值,沒傳參數進來的時候,就用這個值),
????????????@ mark2 int?=60? (=60表示給了一個默認值,沒傳參數進來的時候,就用這個值),
????????????@address varchar(20)
as
語句
go
調用
1:Exce proc_name? 不傳任何值 表示使用默認的值 (但是@address沒有給默認值所以 編譯后會抱錯)
? 沒有給默認值的輸入參數,我們在調用存儲過程的時候要給 值
? 改:Exce proc_name @address='武漢'
2:Exce proc_name 80,@address='武漢'? (只給了一個數字的參數,會默認把參數給第一個上面)
3:Exce proc_name @mark2=80? @address='武漢'? 這樣才會把參數給到第2個上面
(要想不傳參數必須所有的參數 在定義的時候都給上默認的值)
3,帶輸出參數的存儲過程
創建:
create proc proc_name
--(定義參數)
@ id? int output??,? --關鍵字,聲明為輸出參數,沒有的話就是輸入參數。
@ hehe int =10?? --輸入參數
as
sql 語句 給輸出參數賦值/
go
?
調用
1:定義變量:用于接受存儲過程返回的結果
? declare @id int
2: exec proc_name? @id output,60 --調用的時候也得聲明
--------------------------------------------------------------------錯誤處理--------------------------------------------
raiserror 拋出錯誤
例子
當我們不愿意的變量分數>100時候
if(@mark>100)
begin
//開始拋出異常
Raiserror('幾個分數不能是大于100的數字',16,1)? 16代表錯誤等幾? 我門最好都寫16,17,18,1表示錯誤狀態,一般存儲過程里都寫1
return? --立即返回,退出存儲過程
end