創建了是拿來用的,至於為什麼要用存儲過程,要先了解存儲過程存在的意義:
存儲過程由sql語句和流程式控制制語句組成。它的功能包括:接受參數;調用另一過程;返回一個狀態值給調用過程或批處理,指示調用成功或失敗;返回若干個參數值給調用過程或批處理,為調用者提供動態結果;在遠程SQL Server中運行等。
1)·存儲過程是預編譯過的,所以存儲過程執行速度很快.
2)·存儲過程和待處理的數據都放在同一台運行SQL Server的計算機上,使用存儲過程查詢當地的數據,效率自然很高
3)·存儲過程一般多由Client端通過存儲過程的名字進行調用,減少了網路傳輸量,加塊系統速度.
4)·存儲過程還有著如同C語言子函數那樣的被調用和返回值的方便特性。
② ◎❤為什麼存儲過程比SQL語句快些
Transact-SQL語句是應用程序與SQL Server資料庫之間的主要編程介面,大量的時間將花費在Transact-SQL語句和應用程序代碼上。在很多情況下,許多代碼被重復使用多次,每次都輸入相同的代碼不但繁瑣,更由於在客戶機上的大量命令語句逐條向SQL Server發送將降低系統運行效率。因此,SQL Server提供了一種方法,它將一些固定的操作集中起來由SQL Server資料庫伺服器來完成,應用程序只需調用它的名稱,將可實現某個特定的任務,這種方法就是存儲過程。
SQL Server中T-SQL語言為了實現特定任務而將一些需要多次調用的固定的操作編寫成子程序並集中以一個存儲單元的形式存儲在伺服器上,由SQL Server資料庫伺服器通過子程序名來調用它們,這些子程序就是存儲過程。
存儲過程是一種資料庫對象,存儲在資料庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變數、有條件執行,具有很強的編程功能。存儲過程可以使用EXECUTE語句來運行。
在SQL Server中使用存儲過程而不使用存儲在客戶端計算機本地的T-SQL程序有以下幾個方面的好處。
加快系統運行速度 存儲程序只在創建時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
封裝復雜操作 當對資料庫進行復雜操作時(如對多個表進行更新,刪除時),可用存儲過程將此復雜操作封裝起來與資料庫提供的事務處理結合一起使用。
實現代碼重用 可以實現模塊化程序設計,存儲過程一旦創建,以後即可在程序中調用任意多次,這可以改進應用程序的可維護性,並允許應用程序統一訪問資料庫。
增強安全性 可設定特定用戶具有對指定存儲過程的執行許可權而不具備直接對存儲過程中引用的對象具有許可權。可以強制應用程序的安全性,參數化存儲過程有助於保護應用程序不受SQL注入式攻擊。
減少網路流量 因為存儲過程存儲在伺服器上,並在伺服器上運行。一個需要數百行T-SQL代碼的操作可以通過一條執行過程代碼的語句來執行,而不需要在網路中發送數百行代碼,這樣就可以減少網路流量。
③ 什麼是存儲過程有什麼優點
存儲過程是事先經過編譯並存儲在資料庫中的一段SQL語句的集合,調用存儲過程可以簡化應用開發人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。
優點:
1、重復使用:存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量:存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性:參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
(3)存儲過程預編譯執行速度快擴展閱讀:
存儲過程的缺點:
1、更改比較繁瑣:如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣。
2、可移植性差:由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則需要將業務邏輯封裝在不特定於 RDBMS 的中間層中。
④ 存儲過程到底是什麼!
在大型資料庫系統中,存儲過程和觸發器具有很重要的作用。無論是存儲過程還是觸發器,都是sql 語句和流程式控制制語句的集合。就
本質而言,觸發器也是一種存儲過程。存儲過程在運算時生成執行方式,所以,以後對其再運行時其執行速度很快。sql server 2000 不僅提供了用戶自定義存儲過程的功能,而且也提供了許多可作為工具使用的系統存儲過程。
12.1.1 存儲過程的概念
存儲過程(stored procere)是一組為了完成特定功能的sql 語句集,經編譯後存儲在資料庫。中用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。
在sql server 的系列版本中存儲過程分為兩類:系統提供的存儲過程和用戶自定義存儲過程。系統過程主要存儲在master 資料庫中並以sp_為前綴,並且系統存儲過程主要是從系統表中獲取信息,從而為系統管理員管理sql server 提供支持。通過系統存儲過程,ms sql server 中的許多管理性或信息性的活動(如了解資料庫對象、資料庫信息)都可以被順利有效地完成。盡管這些系統存儲過程被放在master 資料庫中,但是仍可以在其它資料庫中對其進行調用,在調用時不必在存儲過程名前加上資料庫名。而且當創建一個新資料庫時,一些系統存儲過程會在新資料庫中被自動創建。用戶自定義存儲過程是由用戶創建並能完成某一特定功能(如查詢用戶所需數據信息)的存儲過程。在本章中所涉及到的存儲過程主要是指用戶自定義存儲過程。
12.1.2 存儲過程的優點
當利用ms sql server 創建一個應用程序時,transaction-sql 是一種主要的編程語言。若運用transaction-sql 來進行編程,有兩種方法。其一是,在本地存儲transaction- sql 程序,並創建應用程序向sql server 發送命令來對結果進行處理。其二是,可以把部分用transaction-sql 編寫的程序作為存儲過程存儲在sql server 中,並創建應用程序來調用存儲過程,對數據結果進行處理存儲過程能夠通過接收參數向調用者返回結果集,結果集的格式由調用者確定;返回狀態值給調用者,指明調用是成功或是失敗;包括針對資料庫的操作語句,並且可以在一個存儲過程中調用另一存儲過程。
我們通常更偏愛於使用第二種方法,即在sql server 中使用存儲過程而不是在客戶計算機上調用transaction-sql 編寫的一段程序,原因在於存儲過程具有以下優點:
(1) 存儲過程允許標准組件式編程
存儲過程在被創建以後可以在程序中被多次調用,而不必重新編寫該存儲過程的sql 語句。而且資料庫專業人員可隨時對存儲過程進行修改,但對應用程序源代碼毫無影響(因為應用程序源代碼只包含存儲過程的調用語句),從而極大地提高了程序的可移植性。
(2) 存儲過程能夠實現較快的執行速度
如果某一操作包含大量的transaction-sql 代碼或分別被多次執行,那麼存儲過程要比批處理的執行速度快很多。因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的執行計劃。而批處理的transaction- sql 語句在每次運行時都要進行編譯和優化,因此速度相對要慢一些。
(3) 存儲過程能夠減少網路流量
對於同一個針對數據資料庫對象的操作(如查詢、修改),如果這一操作所涉及到的 transaction-sql 語句被組織成一存儲過程,那麼當在客戶計算機上調用該存儲過程時,網路中傳送的只是該調用語句,否則將是多條sql 語句,從而大大增加了網路流量,降低網路負載。
(4) 存儲過程可被作為一種安全機制來充分利用
系統管理員通過對執行某一存儲過程的許可權進行限制,從而能夠實現對相應的數據訪問許可權的限制,避免非授權用戶對數據的訪問,保證數據的安全。(我們將在14 章「sqlserver 的用戶和安全性管理」中對存儲過程的這一應用作更為清晰的介紹)
注意:存儲過程雖然既有參數又有返回值,但是它與函數不同。存儲過程的返回值只是指明執行是否成功,並且它不能像函數那樣被直接調用,也就是在調用存儲過程時,在存儲過程名字前一定要有exec保留字(如何執行存儲過程見本章下一字)。
⑤ 在SQLServer中,存儲過程和T-SQL語句,哪個執行快,為什麼
存儲過程能夠實現較快的執行速度。
如果某一操作包含大量的SQL 代碼或分別被多次執行,那麼存儲過程要比批處理的執行速度快很多。因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的執行計劃。而批處理的SQL 語句在每次運行時都要進行編譯和優化,因此速度相對要慢一些。
⑥ 為什麼存儲過程執行速度比普通的SQL快而且減少網路流量
存儲過程所以快是因為他是預先編譯的,當然節省了編譯的時間。減少網路流量是指減少與客戶端之間的交互,在伺服器上執行運算,最後只把結果反給客戶端,所以流量少。
比如你查詢個內容,需要先查一個表,根據結果再查另外一個表。不用存儲過程你怎麼做呢?自然是先讀出那個表的內容來,然後在asp/asp.net/php里,用代碼生成一個語句再去查詢,這樣要往復2,3次。而用存儲過程就可以直接在伺服器上運算,只要一次來回就ok了,自然網路流量就減少
因為在存儲過程中的SQL語句是已經經過了語法檢查和編譯的,可以直接執行;而SQL總要先進行語法解析和編譯才能執行。另外對於網路執行的話,執行相同的任務,客戶端調用存儲過程的代碼傳輸量和直接執行SQL語句相比也要更少。
⑦ SQL server中存儲的過程的特點
存儲過程由SQL語句和流程式控制制語句組成。它的功能包括:接受參數;調用另一過程;返回一個狀態值給調用過程或批處理,指示調用成功或失敗;返回若干個參數值給調用過程或批處理,為調用者提供動態結果;在遠程SQL Server中運行等。
1)·存儲過程是預編譯過的,所以存儲過程執行速度很快.
2)·存儲過程和待處理的數據都放在同一台運行SQL Server的計算機上,使用存儲過程查詢當地的數據,效率自然很高
3)·存儲過程一般多由Client端通過存儲過程的名字進行調用,減少了網路傳輸量,加塊系統速度.
4)·存儲過程還有著如同C語言子函數那樣的被調用和返回值的方便特性。
⑧ 為什麼存儲過程比sql語句效率高
1 存儲過程允許標准組件式編程
存儲過程在被創建以後可以在程序中被多次調用而不必重新編寫該存儲過程的sql
語句而且資料庫專業人員可隨時對存儲過程進行修改但對應用程序源代碼毫無影響因
為應用程序源代碼只包含存儲過程的調用語句從而極大地提高了程序的可移植性
2 存儲過程能夠實現較快的執行速度
如果某一操作包含大量的transaction-sql 代碼或分別被多次執行那麼存儲過程要
比批處理的執行速度快很多因為存儲過程是預編譯的在首次運行一個存儲過程時查詢優化器對其進行分析優化並給出最終被存在系統表中的執行計劃而批處理的transaction-
sql 語句在每次運行時都要進行編譯和優化因此速度相對要慢一些
3 存儲過程能夠減少網路流量
對於同一個針對數據資料庫對象的操作如查詢修改如果這一操作所涉及到的
transaction-sql 語句被組織成一存儲過程那麼當在客戶計算機上調用該存儲過程時
網路中傳送的只是該調用語句否則將是多條sql 語句從而大大增加了網路流量降
低網路負載
4 存儲過程可被作為一種安全機制來充分利用
系統管理員通過對執行某一存儲過程的許可權進行限制從而能夠實現對相應的數據訪
問許可權的限制避免非授權用戶對數據的訪問保證數據的安全
⑨ SQL 中存儲過程怎麼使用
一、簡單的儲存過程:
1、創建一個存儲過程
create procere GetUsers()
begin
select * from user;
end;12345
2、調用存儲過程
call GetUsers();12
3、刪除存儲過程
drop procere if exists GetUsers;
二、帶參數的存儲過程
1、MySql 支持 IN (傳遞給存儲過程) , OUT (從存儲過程傳出) 和 INOUT (對存儲過程傳入和傳出) 類型的參數 , 存儲過程的代碼位於 BEGIN 和 END 語句內 , 它們是一系列 SQL 語句 , 用來檢索值 , 然後保存到相應的變數 (通過指定INTO關鍵字) ;
2、下面的存儲過程接受三個參數 , 分別用於獲取用戶表的最小 , 平均 , 最大分數 , 每個參數必須具有指定的類型 , 這里使用十進制值(decimal(8,2)) , 關鍵字 OUT 指出相應的參數用來從存儲過程傳出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、調用此存儲過程 , 必須指定3個變數名(所有 MySql 變數都必須以@開始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、該調用並沒有任何輸出 , 只是把調用的結果賦給了調用時傳入的變數@minScore, @avgScore, @maxScore, 然後即可調用顯示該變數的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 參數 , 輸入一個用戶 id , 返回該用戶的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、調用存儲過程 :
call GetNameByID(1, @userName);
select @userName;123
⑩ 存儲過程和sql哪個執行速度快,相同任務的情況下
理論上是存儲過程快一些。
因為在存儲過程中的SQL語句是已經經過了語法檢查和編譯的,可以直接執行;而SQL總要先進行語法解析和編譯才能執行。
另外對於網路執行的話,執行相同的任務,客戶端調用存儲過程的代碼傳輸量和直接執行SQL語句相比也要更少。