定義:
一組為了完成特點定功能的SQL語句集合,編譯后存儲在數據庫中,可以通過指定存儲過程形成並給出參數執行。
語法
create proc | procedure pro_name
[{@參數數據類型} [=默認值] [output],
{@參數數據類型} [=默認值] [output],
....
]
as
SQL_statements
修改
alter proc proc_get_student
as
select * from student;
不帶參數存儲過程
創建:create proc proc_get_student
as
select * from student;調用:exec proc_get_student;
帶參數存儲過程
創建:create proc proc_find_stu(@startId int = 1, @endId int = 2)
as
select * from student where id between @startId and @endId默認參數根據需要設置
調用(默認參數):exec proc_find_stu;
調用(自定義參數):exec proc_find_stu 2, 4;
帶輸出參數存儲過程
創建:create proc proc_getStudentRecord(@id int, --默認輸入參數
@name varchar(20) out, --輸出參數
@age varchar(20) output--輸入輸出參數
)
as
select @name = name, @age = age from student where id = @id and age = @age;調用:declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
exec proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name + '#' + @temp;
存儲過程優缺點
優點:
-
- 減少網絡數據量,降低網絡開銷
- 執行速度快,創建時編譯一次,以后不需要重新編譯。一般SQL每次執行都需要編譯(不命中緩存時)
- 多條語句批處理,減少數據庫連接次數
- 參數化,防止SQL注入
- 可控制存儲過程使用權限
- 有些時候修改只需要修改存儲過程,不需要修改程序代碼
缺點:
-
- 使用復雜的存儲過程,但是數據庫不擅長處理邏輯
- 維護問題,不易調試,發現問題。表結構發生改變,涉及的存儲過程修改問題。多副本部署問題。