SQL Server 7.0 入門(六)---建立存儲過程體
2024-08-31 00:48:08
供稿:網友
 
建立存儲過程體 
    存儲過程邏輯駐留在存儲過程體中。一個存儲過程體中可以包含任意條transact sql語句。下面的transact sql語句不能在任何存儲過程體中出現: 
    · create default 
    · create trigger 
    · create procedure 
    · create view 
    · create rule 
1、 局部變量 
局部變量保持存儲過程中間值。當一個值在存儲過程中需要多次,或者某個查詢的結果需要在隨后的查詢中使用時,需要使用局部變量。在這些情形下,值被存儲在局部變量中,并可用于將來的使用。本地變量的名稱以“@”符號開頭。變量的名稱可以包含字符和數值。局部變量在使用前需要進行類型聲明。對局部變量進行賦值需要使用select語句。select可以從一個表中檢索出值并將其賦給某個變量,也可以給變量賦一個常量值。一個簡單的select語句可以給多個局部變量賦值。 
例如: 
declare @var1 integer, @var2 varchar(20) 
select @var1 = 32, 
      @var2 = ‘myage’ 
如果從select查詢中沒有返回任何數據,而select又要將數據的值賦予局部變量,則該局部變量的值將不會發生改變。 
2、 條件詞句 
存儲過程中提供的條件語句包括: 
· if……else語句。 
· while語句。 
1) if……else語句。在該語句中包含三個部分:布爾運算表達式,if語句塊和else語句塊。語法如下: 
if (boolen_expr) 
 {statements} 
else 
 {statements} 
在if或else語句塊中可以有多條語句,這種情形下,需要語句begin和end來標志語句塊。 
2) while語句。while語句用于處理直到某個條件為true前重復執行的語句。語法如下: 
while (boolen_expr) 
 begin 
 statement(s) 
break 
statement(s) 
continue 
       end 
      begin和end語句標志循環體。break語句結束循環的執行(即走到end語句之后)。continue語句將控制處理過程回到循環的開始處(即begin語句的右邊)。 
      注意:如果有兩個或多個while循環被嵌套,則內部的break退出的是次外層的循環。內部循環結束之后的所有語句在內部循環執行之后才能繼續執行。 
3、 goto語句 
在存儲過程的執行中,語句是順序執行的。goto語句則是用來打破這種語句執行的順序,它立即跳到某條語句上執行,而這條語句往往不緊跟在前一語句之后。goto語句與一個標志(label)一起使用,該標志用來標識一條語句。 
例如: 
use pubs 
go 
declare @num int 
select 
if @num = 0 
    goto err 
else 
    begin 
    print ‘authors found’ 
    select * from authors 
    goto last 
    end 
err: print ‘no authors found’ 
last: print ‘finish execution’ 
go 
4、 return語句 
return語句用于無條件的退出存儲過程。return之后的任何語句都不再執行。return語句可以給調用語句返回一個值,但不能返回null值。sql server經常為存儲過程返回一個狀態值。如果成功地執行,則返回一個0,如果出現了錯誤,則返回一個為負數的錯誤碼。 
存儲過程返回的錯誤碼 
值 
說    明 
值 
說    明 
0 
過程執行成功 
-8 
發生了非致命的內部問題 
-1 
漏掉了對象 
-9 
達到了系統極限 
-2 
發生了數據類型錯誤 
-10 
發生了致命的內部不一致錯誤 
-3 
該處理被選擇成了死鎖的犧牲者 
-11 
發生了致命的內部不一致錯誤 
-4 
發生了權限錯誤 
-12 
表或索引被破壞 
-5 
發生了語法錯誤 
-13 
數據庫被破壞 
-6 
發生了混雜的用戶錯誤 
-14 
發生了硬件錯誤 
-7 
資源錯誤,如空間不夠等 
5、 使用游標(cursor)在需要一行一行處理時,游標十分有用。游標可以打開一個結果集合(按照指定的標準選擇的行),并提供在結果集中一行一行處理的功能。基于游標的類型,可以對其進行回滾或者前進。在使用游標時需要5個步驟:注冊會員,創建你的web開發資料庫,