?? 12-2-8.cfm.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>使用存儲過程</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<font FACE="宋體"><b>
<p ALIGN="JUSTIFY">使用存儲過程</p>
</b></font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">該部分將向你介紹如何創建和使用你自己的存儲過程。在SQL
Server中存儲過程是和傳統的計算機應用程序最相近的事物,并具有如下的優點:</p>
<blockquote>
<p ALIGN="JUSTIFY">假如你有一套復雜的SQL語句需要在多個Active Server Pages中執行。你可以把他們放入一個存儲過程,然后執行該存儲過程。這能夠減少你Active
Server Pages的大小。同時還能確保在每一頁上執行的SQL語句都相同。</p>
<p ALIGN="JUSTIFY">當你執行一個SQL的批處理時。服務器首先必須編譯在批處理中的所有語句。這不但需要時間,還要花費服務器資源。相比較而言,在存儲過程第一次執行后,它就不需要重新編譯了。通過使用存儲過程,你可以跨過編譯這一步,更快地執行SQL語句集合。從一個Active
Server頁中執行一個存儲過程比執行一個SQL語句的集合更有效。</p>
<p ALIGN="JUSTIFY">你可以對存儲過程輸入輸出值。這意味著存儲過程非常的靈活,相同的存儲過程可以根據不同的輸入值返回不同的信息。</p>
<p ALIGN="JUSTIFY">當你向數據庫服務器傳遞一個SQL語句集合時,必須傳遞其中的每一個獨立語句,而當你執行存儲過程時,相反的,僅僅傳遞一個簡單的語句。通過使用存儲過程,你可以減少在網絡上的阻塞。</p>
<p ALIGN="JUSTIFY">你可以配置表的權限,比如用戶只能通過使用存儲過程來修改表。這就能增加在你數據庫中表的安全性。</p>
<p ALIGN="JUSTIFY">你可以在其他的存儲過程內部執行你的存儲過程。這種策略就允許你在非常小的存儲過程上建立非常復雜的存儲過程。這也意味著你可以為許多不同的編程任務使用相同的存儲過程。</p>
</blockquote>
<p ALIGN="JUSTIFY">當你在Active Server頁中添加SQL語句時,你必須仔細考慮能否把這些語句放置到存儲過程中。上面提到的優點都是實質性的。如下一部分所示,存儲過程是非常容易創建的。</p>
</font><font FACE="宋體"><b>
<p ALIGN="JUSTIFY">使用CREATE PROCEDURE創建存儲過程</p>
</b></font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">你可以使用CREATE PROCEDURE來創建一個存儲過程。下面就是一個非常簡單的存儲過程的一個例子:</p>
<p ALIGN="JUSTIFY">CREATE PROCEDURE retrieve_authors AS SELECT * FROM Authors</p>
<p ALIGN="JUSTIFY">當你創建存儲過程時,你必須給它指定一個名稱。在本例子中,存儲過程的名稱為retrieve_authors。你可以給存儲過程賦予任何你想要的名稱,但最好你能夠使該名稱在一定程度上描述存儲過程的功能。</p>
<p ALIGN="JUSTIFY">每一個存儲過程都包括一個或多個SQL語句。為了指明是存儲過程一部分的SQL語句,你只需簡單地在關鍵詞AS后面包含它們。在前面例子中的存儲過程只包含一個SQL語句。當該存儲過程執行時,它返回在Authors表中所有的記錄。</p>
<p ALIGN="JUSTIFY">你可以使用EXECUTE語句來執行一個存儲過程。比如,為了執行retrieve_authors存儲過程,你可以使用如下的語句:</p>
<p ALIGN="JUSTIFY">EXECUTE retrieve_authors</p>
<p ALIGN="JUSTIFY">當你執行該存儲過程時,所有包括在其中的SQL語句都會執行,在上面的例子中,會返回所有在Authors表中的記錄。</p>
<p ALIGN="JUSTIFY">當在批處理中的第一個語句是調用存儲過程時,你并不需要使用EXECUTE語句。你可以簡單地提供存儲過程的名稱來執行存儲過程。比如在ISQL/W中,可以象下面所示來執行存儲過程:</p>
<p ALIGN="JUSTIFY">retrieve_authors</p>
<p ALIGN="JUSTIFY">這起同樣的作用。存儲過程會被執行,并會返回結果。然而如果在該存儲過程之前還有其他的任何語句,你就會收到錯誤信息(一般地,語法錯誤)。</p>
<p ALIGN="JUSTIFY">當你創建和執行一個存儲過程時,這僅僅是在某一個數據庫的范圍內完成。假設你在數據庫MyDatabase內創建了存儲過程retrieve_authors。如果沒有指明過程調用,你就不能在另一個數據庫比如MyDatabase2中調用存儲過程retrieve_authors。假如你需要在Mydatabase2中執行存儲過程retrieve_authors,你必須使用如下的語句(注意下面的兩個點號):</p>
<p ALIGN="JUSTIFY">EXECUTE Mydatabase..retrieve_authors</p>
<p ALIGN="JUSTIFY">一旦你已經創建了一個存儲過程,你就能使用系統存儲過程sp_helptext來觀看在該存儲過程的的SQL語句。比如,如果你輸入命令sp_helptext
retrieve_authors,就會顯示下面的結果:</p>
<p ALIGN="JUSTIFY">text</p>
</font><font SIZE="3">
<p ALIGN="JUSTIFY">……………………………………………</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">CREATE PROCEDURE retrieve_authors AS SELECT * FROM Authors</p>
<b>
<p ALIGN="JUSTIFY">注意</p>
</b>
<p ALIGN="JUSTIFY">你可能感到奇怪的是,</font><font SIZE="3">sp_helptext</font><font
FACE="宋體" SIZE="3">系統過程本身就是一種存儲過程類型。它是一種系統的存儲過程。(系統存儲過程存儲在Master數據庫中,能夠被所有的數據庫訪問。)為了滿足你的好奇心,你可以使用命令sp_helptext
sp_helptext來觀看組成sp_helptext本身的SQL語句。</p>
<p ALIGN="JUSTIFY">你在創建完存儲過程后,不能對其進行修改。假如你需要修改一個存儲過程。你必須首先破壞它,然后重新構建之。為了破壞一個存儲過程。你可以使用DROP
PROCEDURE語句,例如下面的語句刪除retrieve_authors存儲過程:</p>
<p ALIGN="JUSTIFY">DROP PROCEDURE retrieve_authors</p>
<b>
<p ALIGN="JUSTIFY">注意</p>
</b></font><font SIZE="3">
<p ALIGN="JUSTIFY"></font><font FACE="宋體" SIZE="3">你可以使用系統存儲過程</font><font
SIZE="3">sp_help</font><font FACE="宋體" SIZE="3">來觀看在當前數據庫中所有存儲過程的列表。假如你不加任何修改地執行了</font><font
SIZE="3">sp_help</font><font FACE="宋體" SIZE="3">。該過程會顯示在當前數據庫中所有的存儲過程、觸發器和表。假如在</font><font
SIZE="3">sp_help</font><font FACE="宋體" SIZE="3">后面跟上指定的存儲過程,</font><font
SIZE="3">sp_help</font><font FACE="宋體" SIZE="3">會僅僅顯示那個存儲過程的信息。</p>
</font>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -