計算機, 數據庫
SQL存儲過程:創建和使用
SQL存儲過程是可以存儲在可執行軟件模塊數據庫中的各種物體的形式。 換句話說,它是一個包含SQL語句的對象。 這些存儲過程可以在客戶端應用程序,以獲得良好的性能來執行。 此外,這種設備通常是由其他腳本,甚至從其他部分調用。
介紹
許多人認為,它們類似於各種手續 高級編程語言 (分別是,除了MS SQL)。 也許這是真的。 它們有相似的參數,它們可以發出類似的值。 此外,在一些情況下,他們接觸到的。 例如,它們相結合,與DDL的數據庫和DML數據,以及用戶功能(代號 - UDF)。
實際存儲SQL過程有一個寬範圍的區分它們這樣的過程中的優點。 安全性,可變性編程效率 - 這一切都吸引著用戶來使用數據庫,越來越多。 普及的高峰期出現程序2005 - 2010年,當我從名稱«SQL Server Management Studio中»下的“微軟”的方案。 有了它的幫助,與數據庫的工作變得更容易,更實用,更方便。 年復一年,這種 傳遞信息的方法, 在編程環境中得到普及。 今天, MS SQL服務器 絕對是平常的程序,讓用戶在“溝通”與數據庫,站在以“創先爭優”相提並論。
當你調用的程序,它會立即由服務器,而無需不必要的進程和用戶介入處理。 然後,您可以執行與信息採取任何行動:刪除,執行,變更。 在這一切都是在DDL運營商,誰一手執行對這些對象的複雜操作。 而這一切都發生得很快,並且服務器實際上並沒有加載。 這種速度和效率讓你快速從用戶到服務器,反之亦然傳輸大量信息。
為了實現與信息這項工作,有幾種編程語言技術。 這些措施包括,例如,PL /從SQL 數據庫管理系統 的Oracle,PSQL在InterBase和火鳥系統,以及經典的“maykrosoftovskih»的Transact-SQL。 所有這些都旨在創建和運行存儲過程,讓您在使用上的大型數據庫處理自己的算法。 這是必要的,以確保那些誰進行這些信息的管理,可以保護所有的物體從未經授權的第三方,因此,創建,修改或某些數據的刪除。
生產率
這些數據庫對象可以以不同的方式進行編程。 這允許用戶選擇的過程,將是最合適的類型,從而節省時間和精力。 此外,過程本身進行處理,從而避免了用在服務器和用戶之間的通信大量的時間。 該模塊可以重新編程,以絕對的任何時間向正確的方向改變。 尤其值得注意的速度與該發射SQL存儲過程的發生:該過程更快其他類似給它,使其成為一個方便且通用。
安全
這種類型的信息處理從在它提供增強的安全性的類似過程不同。 這是一個事實,即從程序訪問其他用戶可以完全消除保證。 這將允許管理員和他們獨立經營,而不必擔心攔截或數據庫未經授權的訪問。
數據傳輸
存儲的SQL程序和客戶應用程序之間的通信是使用參數和返回值。 後者是沒有必要將數據發送到存儲過程,但處理的SQL的信息(主要是在用戶的請求),和。 一旦存儲過程已完成其工作,它採用多種方法,通過它可以實現為一個存儲SQL過程和回報,例如通話將數據包發送回(但同樣,如果需要的話)來調用應用程序:
- 數據傳輸 經由輸出參數類型;
- 通過return語句數據傳輸;
- 通過載波選擇的數據傳輸。
現在看這個過程是如何看起來是一樣的內部。
1.創建EXEC存儲在SQL過程中
您可以創建在MS SQL(梟雄工作室)的過程。 在創建過程之後,它列出了一個可編程的數據庫節點,其中,所述程序是由創建的操作員執行上。 要使用EXEC-一個包含對象名稱進程中執行SQL存儲過程。
創建名稱時是第一位的過程,然後由分配給他一個或多個參數。 參數可以是可選的。 參數(一個或多個)後,即過程的主體,要寫入,有必要進行一些必要的操作。
事實上,身體可以有局部變量,位於它,而這些變量是局部的和有關的程序。 換句話說,他們只能在身體護理被認為是 微軟的SQL Server。 在這種情況下,存儲過程中被認為是本地的。
因此,為了創建一個過程,我們需要一個過程的名稱和至少一個參數的過程體。 請注意,在這種情況下的最佳選擇是在分類模式名稱程序創建和實現。
程序主體可以具有任何種類的運營商的SQL,例如,如創建一個表,將所述表中的一個或多個行,在建立數據庫類型和字符,等等。 儘管如此,過程體它限制某些操作。 一些最重要的限制列舉如下:
- 身體不會產生任何其它存儲過程;
- 身體不能創建有關對象的假象;
- 身體不會產生任何的觸發器。
2.設置變量的過程的主體
你可以局部變量身體的過程,然後他們將是一個過程體中。 一個好的做法是在存儲過程主體的開始創建一個變量。 但是,你也可以在對象的身體的任何地方設置的變量。
有時你可能會注意到某些變量在同一行中設置,並用逗號分隔的每個變量。 還要注意的是變量前綴@。 在此過程中的身體,你可以設置你想要的變量。 例如,一個可變@ NAME1可朝向程序本體的端部公佈。 為了分配一個值到一個變量使用一組個人數據的聲明。 相反,當在同一行中聲明多個變量的情況,在這種情況下只使用一組個人數據。
用戶經常會提出這樣的問題:“如何在過程的主體分配多個值在一個語句”嗯? 有趣的問題,但是這是比你想像的要容易得多。 答案是:有這樣的對的幫助下«選擇無功=價值“。 您可以使用這些對,用逗號隔開。
3.創建一個SQL存儲過程
在各種各樣的人的例子表明創建一個簡單的存儲過程,並執行它。 然而,該過程可能需要這樣的參數調用進程將會有接近它(但不總是)的值。 如果它們匹配,然後開始在身體內的相應流程。 例如,如果您創建一個將採取城市和地區從主叫方,並返回作者簡介多少參考相應的城市和地區的數據的過程。 該程序將查詢提交的數據庫表,例如,酒館,用於進行該計算的作者。 為了獲得這些數據庫,例如,谷歌與下載頁面SQL2005的SQL腳本。
在前面的例子中,該過程需要兩個參數,這在英國將被稱為有條件@state和@city。 數據類型對應於應用程序中指定的類型。 過程本體具有內部變量@TotalAuthors(所有作者),該變量用於顯示它們的數量。 接下來是一個部分選擇請求的所有罪名。 最後,計算出的值顯示在用print語句輸出窗口。
如何執行SQL存儲過程
有兩種方法來執行的程序。 第一種方式是通過作為逗號分隔的列表在過程名後進行傳遞參數所示。 假設我們有兩個值(如在前面的例子)。 這些值是使用的變量和@state @city程序收集。 在該方法中,發送順序的重要參數。 這種方法被稱為自變量的傳輸順序。 在第二種方法中,這些參數已直接分配,在這種情況下的順序並不重要。 第二種方法被稱為命名參數的傳輸。
該過程可以稍微從典型偏離。 儘管如此,如上面的例子,但參數僅轉向這裡。 也就是說@city參數首先存儲和@state旁邊的默認值存儲。 默認設置通常是單獨分配。 SQL存儲過程是簡單的參數。 在這種情況下,所提供的選項的“UT”代替默認值“CA”。 在第二實施例通行證@city只有一個參數值,以及@state選項默認為“CA”。 有經驗的程序員被告知,所有的默認變量位於接近參數列表的末尾。 否則,執行是不可能的,那麼你有一個命名參數的更長,更複雜的轉移工作。
4.存儲過程的SQL Server:返回的方式
主要有三種方式來發送保存在被調用過程的數據。 他們列舉如下:
- 返回值的存儲過程;
- 輸出參數存儲過程;
- 選擇一個存儲過程。
4.1的SQL存儲過程返回值
在此過程中,該過程將本地變量的值並將其返回。 該程序也可以直接返回一個恆定值。 在下面的例子中,我們已經創建了返回贊助商總數的過程。 如果我們比較這與之前的過程中,你可以看到打印的值是通過反向替代。
現在,讓我們來看看如何執行的程序和顯示值,返回它。 需要執行程序以建立與可變打印,這是該過程之後進行。 通知而不是打印操作員可以使用選擇運營商,例如,選擇@RetValue和OutputValue。
4.2輸出參數SQL存儲過程
響應值可用於返回,我們在前面的例子中所看到的單個變量。 使用輸出允許程序發送一個或多個變量給主叫方。 在創建過程時,輸出參數表示為時間這個關鍵字«輸出»。 如果該參數被指定為一個輸出參數,該程序對象必須給它賦值。 存儲過程SQL,其實例在下面可以看到,在這種返回到最後信息的情況。
在這個例子中,將有兩個週末名稱:@TotalAuthors和@TotalNoContract。 它們在參數列表中指定。 這些變量在過程體中賦值。 當我們使用輸出參數,調用者可以看到在過程體設置的值。
另外,在前面的情況下,兩個變量的聲明,以便查看安裝的存儲過程,MS SQL Server作為輸出參數的值。 然後該程序通過將正常值«CA»參數來執行。 下面的參數是輸出,因此,聲明變量在規定的方式通過。 請注意,當可變輸出關鍵字也在這裡指定。 該過程成功完成後,利用輸出參數返回的值被顯示在消息窗口上。
4.3選擇一個SQL存儲過程
這種技術被用於返回在所述形式表數據值(記錄集)的一組調用存儲過程。 在這個例子中,SQL存儲與@AuthID通過過濾此參數@AuthId返回的記錄請求表“作者”參數的過程。 選擇操作員決定什麼應該被返回給調用存儲過程。 當存儲過程AUTHID發送回。 這樣的過程總是只返回一個記錄或根本沒有。 然而,存儲過程不會對多個條目返回的任何限制。 經常可以發現實施例,其中使用與所述計算出的變量參數選擇了返回數據是由提供多個合計值來完成的。
總之
存儲過程是一個相當嚴重的程序,歸還或移交,以及建立必要的變量,由於客戶端應用程序。 由於該存儲過程是在服務器本身上執行時,可避免在服務器和客戶端應用程序(對於某些計算)之間的大量的數據交換。 這使得它可以減少SQL服務器,這當然是他們的人的手的負擔。 其中一個亞種的存儲過程牛逼SQL,但他們的研究是需要那些參與創造一個令人印象深刻的數據庫。 也有細微的差別,可以在存儲過程的研究有用的大,即使數額巨大,然而,這需要對那些誰是計劃做緊身節目,包括專業。
Similar articles
Trending Now