建立存儲過程體
存儲過程邏輯駐留在存儲過程體中。一個存儲過程體中可以包含任意條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)在需要一行一行處理時,游標十分有用。游標可以打開一個結果集合(按照指定的標准選擇的行),並提供在結果集中一行一行處理的功能。