亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是存儲過程?

什么是存儲過程?

慕容708150 2019-11-21 13:51:36
什么是存儲過程?它們如何工作?存儲過程的組成是什么(每個事物都必須是存儲過程)?
查看完整描述

3 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

存儲過程是可以以兩種方式執行的一批SQL語句。大多數主要的DBM支持存儲過程。但是,并非全部。您將需要與您的特定DBMS幫助文檔一起驗證具體信息。由于我最熟悉SQL Server,因此將其作為示例。


要創建存儲過程,語法非常簡單:


CREATE PROCEDURE <owner>.<procedure name>


     <Param> <datatype>


AS


     <Body>

因此,例如:


CREATE PROCEDURE Users_GetUserInfo


    @login nvarchar(30)=null


AS


    SELECT * from [Users]

    WHERE ISNULL(@login,login)=login

存儲過程的一個好處是,您可以將數據訪問邏輯集中到一個位置,然后便于DBA優化。存儲過程還具有安全優勢,因為您可以授予存儲過程執行權限,但用戶不需要對基礎表具有讀/寫權限。這是反對SQL注入的良好第一步。


存儲過程確實有缺點,基本上是與基本CRUD操作相關的維護。假設每個表都有一個Insert,Update,Delete以及至少一個基于主鍵的選擇,這意味著每個表將具有4個過程?,F在,建立一個包含400個表的體面大小的數據庫,您就有1600個過程!并假設您沒有可能會重復的重復項。


在這里使用ORM或其他方法自動生成基本的CRUD操作有很多優點。


查看完整回答
反對 回復 2019-11-21
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

存儲過程是一組已創建并存儲在數據庫中的SQL語句。存儲過程將接受輸入參數,因此多個客戶端可以使用不同的輸入數據在網絡上使用單個過程。存儲過程將減少網絡流量并提高性能。如果我們修改存儲過程,則所有客戶端都將獲取更新的存儲過程。


創建存儲過程的樣本


CREATE PROCEDURE test_display

AS

    SELECT FirstName, LastName

    FROM tb_test;


EXEC test_display;

使用存儲過程的優點


存儲過程允許模塊化編程。


您可以創建一次該過程,將其存儲在數據庫中,然后在程序中多次調用它。


存儲過程可以加快執行速度。


如果該操作需要重復執行大量SQL代碼,則存儲過程可能會更快。首次執行時,將對它們進行解析和優化,并且存儲過程的編譯版本保留在內存緩存中以備后用。這意味著不需要每次使用都重新解析和優化存儲過程,從而大大縮短了執行時間。


存儲過程可以減少網絡流量。


可以通過一條在過程中執行代碼的語句來執行需要數百行Transact-SQL代碼的操作,而不是通過網絡發送數百行代碼。


存儲過程為您的數據提供更好的安全性


即使沒有權限直接執行該過程的語句,也可以向用戶授予執行存儲過程的權限。


在SQL Server中,我們有不同類型的存儲過程:


系統存儲過程

用戶定義的存儲過程

擴展存儲過程

系統存儲的過程存儲在master數據庫中,這些過程以sp_前綴開頭。這些過程可用于執行各種任務,以支持系統表中外部應用程序調用的SQL Server功能


示例:sp_helptext [StoredProcedure_Name]


用戶定義的存儲過程通常存儲在用戶數據庫中,并且通常旨在完成用戶數據庫中的任務。盡管編碼這些程序不使用的sp_前綴,因為如果我們使用的sp_第一個前綴,它會檢查主數據庫,然后它涉及到用戶定義的數據庫。


擴展存儲過程是從DLL文件調用函數的過程。如今,不建議使用擴展存儲過程,因為最好避免使用擴展存儲過程。


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 927 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號