優勢:建立儲存過程1、提高效能
sql語句在建立過程時進行分析和編譯。 儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的儲存計畫,這樣,在執行過程時便可節省此開銷。
2、降低網路開銷
儲存過程呼叫時只需用提供儲存過程名和必要的引數資訊,從而可降低網路的流量。
3、便於進行**移植
資料庫專業人員可以隨時對儲存過程進行修改,但對應用程式源**卻毫無影響,從而極大的提高了程式的可移植性。
4、更強的安全性
1)系統管理員可以對執行的某乙個儲存過程進行許可權限制,避免非授權使用者對資料的訪問
2)在通過網路呼叫過程時,只有對執行過程的呼叫是可見的。 因此,惡意使用者無法看到表和資料庫物件名稱、嵌入自己的 transact-sql 語句或搜尋關鍵資料。
3)使用過程引數有助於避免 sql 注入攻擊。 因為引數輸入被視作文字值而非可執行**,所以,攻擊者將命令插入過程內的 transact-sql 語句並損害安全性將更為困難。
4)可以對過程進行加密,這有助於對源**進行模糊處理。
劣勢:
1、儲存過程需要專門的資料庫開發人員進行維護,但實際情況是,往往由程式開發員人員兼職
2、設計邏輯變更,修改儲存過程沒有sql靈活
在通常的專案研發中,用儲存過程卻相對較少,這是為什麼呢?
分析原因如下:
1)沒有特定的資料庫開發人員,普通程式設計師兼職進行資料庫操作
2)程式設計師往往只需操作程式,即可完成資料訪問,無需再在資料庫上進行開發
3)專案需求變動比較頻繁,修改sql語句比較方便,特別是涉及邏輯變更
基於實際應用的經驗,給予如下建議:
1、在一些高效率或者規範性要求比較高的專案,建議採用儲存過程
2、對於一般專案建議採用引數化命令方式,是儲存過程與sql語句一種折中的方式
3、對於一些演算法要求比較高,涉及多條資料邏輯,建議採用儲存過程
引用自:
create procedure getstu
@id int --這是引數以及引數型別
as begin
select * from students where id = @id
end
procedure 可以簡寫成 proc修改儲存過程
alter proc getstu
@id int
as begin
select * from students where id = @id
end
執行儲存過程
exec getstu 2
刪除儲存過程
if(exists(select * from sys.objects where name = 'getstu'))
drop proc getstu
如果存在,則刪除或
if object_id (n'getstu', n'p') is not null
drop proc getstu
Sql Server使用儲存過程
1 儲存過程基本語句 connect to studenttest select from tbl classinfo 建立儲存過程 create procedure proc demo begin declare v i int default 10 declare v classname var...
sql server儲存過程
建立表的語句 create table student sno int primary key,sname nvarchar 30 sgentle nvarchar 2 sage int,sbirth smalldatetime,sdept nvarchar 30 drop table studen...
SQLSERVER儲存過程
sqlserver儲存過程使用說明書 引言首先介紹一下什麼是儲存過程 儲存過程就是將常用的或很複雜的工作,預先用 sql語句寫好並用乙個指定的名稱儲存起來,並且這樣的語句是放在資料庫中的,還可以根據條件執行不同 sql語句,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫 ex...