?? 12-2-12.cfm.htm
字號(hào):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>在存儲(chǔ)過(guò)程中使用RETURN語(yǔ)句</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<p> <b><font FACE="宋體"></p>
<p ALIGN="JUSTIFY">在存儲(chǔ)過(guò)程中使用</font>RETURN<font FACE="宋體">語(yǔ)句</font></b><font
FACE="宋體" SIZE="3"></p>
<p ALIGN="JUSTIFY">在上面的文章中我們已經(jīng)介紹了RETURN語(yǔ)句的使用。在存儲(chǔ)過(guò)程中該語(yǔ)句的用法和你在批處理中的用法是一模一樣的。RETURN語(yǔ)句會(huì)導(dǎo)致過(guò)程立即退出。考察下面的例子:</p>
<p ALIGN="JUSTIFY">CREATE PROCEDURE check_tables</p>
<p ALIGN="JUSTIFY">(@who VARCHAR(30))</p>
<p ALIGN="JUSTIFY">AS</p>
<p ALIGN="JUSTIFY">IF EXISTS(SELECT name FROM Philosophers WHERE <a
HREF="mailto:name=@who">name=@who</a>)</p>
<p ALIGN="JUSTIFY">BEGIN</p>
<p ALIGN="JUSTIFY">PRINT </font><font SIZE="3">“</font><font FACE="宋體" SIZE="3">In
the Philosophers Table</font><font SIZE="3">”</font><font FACE="宋體" SIZE="3"></p>
<p ALIGN="JUSTIFY">RETURN</p>
<p ALIGN="JUSTIFY">END</p>
<p ALIGN="JUSTIFY">IF EXISTS(SELECT author_name FROM Authors WHERE <a
HREF="mailto:author_name=@who">author_name=@who</a>)</p>
<p ALIGN="JUSTIFY">BEGIN</p>
<p ALIGN="JUSTIFY">PRINT </font><font SIZE="3">“</font><font FACE="宋體" SIZE="3">In
the Authors Table</font><font SIZE="3">”</font><font FACE="宋體" SIZE="3"></p>
<p ALIGN="JUSTIFY">RETURN</p>
<p ALIGN="JUSTIFY">END</p>
<p ALIGN="JUSTIFY">PRINT </font><font SIZE="3">“</font><font FACE="宋體" SIZE="3">Not
in any tables!</font><font SIZE="3">”</font><font FACE="宋體" SIZE="3"></p>
<p ALIGN="JUSTIFY">RETURN</p>
<p ALIGN="JUSTIFY">該過(guò)程檢查了兩個(gè)表以判斷一個(gè)人是否是哲學(xué)家或作者。假如提供的名稱(chēng)即不是哲學(xué)家也不是作者,打印文本“Not
in any tables!</font><font SIZE="3">”</font><font FACE="宋體" SIZE="3">。RETURN語(yǔ)句會(huì)在一旦存在匹配時(shí),立刻退出該過(guò)程。</p>
<p ALIGN="JUSTIFY">比如,假定你使用參數(shù)“Plato</font><font SIZE="3">”</font><font
FACE="宋體" SIZE="3">來(lái)執(zhí)行該過(guò)程。首先使用表Philosophers來(lái)檢測(cè)是否存在“Plato</font><font
SIZE="3">”</font><font FACE="宋體" SIZE="3">。由于該名字存在于該表中,所以過(guò)程打印文本</font><font
SIZE="3">”</font><font FACE="宋體" SIZE="3">In the Philosophers table</font><font
SIZE="3">”</font><font FACE="宋體" SIZE="3">,然后過(guò)程在執(zhí)行到RETURN語(yǔ)句時(shí),退出。</p>
<p> <b></p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">注意</b></font><font SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font FACE="宋體" SIZE="3">你可以使用</font><font
SIZE="3">RETURN</font><font FACE="宋體" SIZE="3">語(yǔ)句結(jié)束任何過(guò)程。這實(shí)際上并不完成任何事情。因?yàn)樵谌魏吻闆r下,過(guò)程總是要退出的。</p>
<p ALIGN="JUSTIFY">當(dāng)你在存儲(chǔ)過(guò)程而不是在批處理中使用RETURN語(yǔ)句時(shí),你能夠返回一整數(shù)值。該整數(shù)值代表一個(gè)狀態(tài)碼。下面就是上面的例子經(jīng)過(guò)改寫(xiě)后,返回特定的整數(shù)值。</p>
<p ALIGN="JUSTIFY">CREATE PROCEDURE check_tables</p>
<p ALIGN="JUSTIFY">(@who VARCHAR(30))</p>
<p ALIGN="JUSTIFY">AS</p>
<p ALIGN="JUSTIFY">IF EXISTS(SELECT name FROM Philosophers WHERE <a
HREF="mailto:name=@who">name=@who</a>)</p>
<p ALIGN="JUSTIFY">BEGIN</p>
<p ALIGN="JUSTIFY">RETURN(1)</p>
<p ALIGN="JUSTIFY">END</p>
<p ALIGN="JUSTIFY">IF EXISTS(SELECT author_name FROM Authors WHERE <a
HREF="mailto:author_name=@who">author_name=@who</a>)</p>
<p ALIGN="JUSTIFY">BEGIN</p>
<p ALIGN="JUSTIFY">RETURN(2)</p>
<p ALIGN="JUSTIFY">END</p>
<p ALIGN="JUSTIFY">RETURN(3)</p>
<p ALIGN="JUSTIFY">該過(guò)程完成和前面的那個(gè)過(guò)程相同的任務(wù)。然而當(dāng)在表中發(fā)現(xiàn)該姓名時(shí),并不打印信息,代替地,該過(guò)程使用RETURN語(yǔ)句來(lái)指明從那個(gè)表中找到該名稱(chēng)。例如,假如你使用參數(shù)“James
Joyce”來(lái)執(zhí)行該過(guò)程時(shí)。存儲(chǔ)過(guò)程會(huì)返回值2,因?yàn)镴ames Joyce在表Authors中,而不是在表Philosophers中。你可以在Active
Server Page或其他的存儲(chǔ)過(guò)程中使用狀態(tài)值來(lái)確定該姓名所在的表。</p>
<p ALIGN="JUSTIFY">當(dāng)使用狀態(tài)值時(shí),你必須使用對(duì)于1或小于-99的值。SQL
Server使用值0來(lái)報(bào)告一個(gè)存儲(chǔ)過(guò)程的成功執(zhí)行。它同時(shí)使用小于0對(duì)于-100的值來(lái)報(bào)告錯(cuò)誤(參看表12。1以獲得SQL
Server使用的狀態(tài)值的完全列表)。</font></p>
<p ALIGN="LEFT"> </p>
<table BORDER="1" CELLSPACING="2" BORDERCOLOR="#808080" CELLPADDING="7" WIDTH="456">
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">值</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">意思</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">0</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">過(guò)程成功執(zhí)行。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-1</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">對(duì)象丟失。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-2</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生數(shù)據(jù)類(lèi)型錯(cuò)誤。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-3</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">處理過(guò)程被死鎖。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-4</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生權(quán)限錯(cuò)誤。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-5</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生語(yǔ)法錯(cuò)誤。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-6</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生惡意用戶(hù)錯(cuò)誤。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-7</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生資源錯(cuò)誤,比如空間不夠等。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-8</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">遭遇非致命的內(nèi)部問(wèn)題。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-9</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">遭遇系統(tǒng)限制。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-10</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生致命的內(nèi)部不穩(wěn)定性。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-11</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生致命的內(nèi)部不穩(wěn)定性。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-12</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">表或索引被破壞。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-13</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">數(shù)據(jù)庫(kù)被破壞。</font></td>
</tr>
<tr>
<td WIDTH="32%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">-14</font></td>
<td WIDTH="68%" VALIGN="TOP"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">發(fā)生硬盤(pán)錯(cuò)誤。</font></td>
</tr>
<tr>
<td VALIGN="TOP" COLSPAN="2"><font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">包含在-15到-99之間的值有SQL
Server保留以在將來(lái)使用。</font></td>
</tr>
</table>
<p> <font FACE="宋體" SIZE="3"><b></p>
<p ALIGN="JUSTIFY">表12.1 過(guò)程狀態(tài)值</p>
<p ALIGN="JUSTIFY">注意</b></font><font SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font FACE="宋體" SIZE="3">當(dāng)你使用</font><font SIZE="3">RETURN</font><font
FACE="宋體" SIZE="3">語(yǔ)句返回狀態(tài)值時(shí),切記不要返回</font><font SIZE="3">NULL</font><font
FACE="宋體" SIZE="3">值。這會(huì)導(dǎo)致錯(cuò)誤的結(jié)果。</p>
<p ALIGN="JUSTIFY">為了獲得在前面例子中過(guò)程返回的狀態(tài)值,你可以使用如下的語(yǔ)句:</p>
<p ALIGN="JUSTIFY">DECLARE @conclusion INT</p>
<p ALIGN="JUSTIFY">EXECUTE @conclusion=check_tables </font><font SIZE="3">“</font><font
FACE="宋體" SIZE="3">James Joyce</font><font SIZE="3">”</font><font FACE="宋體"
SIZE="3"></p>
<p ALIGN="JUSTIFY">SELECT @conclusion</p>
<p ALIGN="JUSTIFY">變量@conclusion用于保存狀態(tài)值。它必須定義成INT整數(shù)數(shù)據(jù)類(lèi)型。當(dāng)你執(zhí)行存儲(chǔ)過(guò)程check_tables時(shí),使用下面的語(yǔ)句將狀態(tài)值賦予該變量:</p>
<p ALIGN="JUSTIFY">EXECUTE @conclusion=check_tables </font><font SIZE="3">“</font><font
FACE="宋體" SIZE="3">James Joyce</font><font SIZE="3">”</font></p>
</body>
</html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -