首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 入門(六):預存程序主體結構、流程控制與游標應用

     編輯:關於SqlServer

預存程序主體限制

主體內不可出現:`CREATE DEFAULT`、`CREATE TRIGGER`、`CREATE PROCEDURE`、`CREATE VIEW`、`CREATE RULE`。

區域變數

  • 命名以 `@` 開頭,支援字母數字底線
  • 使用前必須宣告型別:`DECLARE @var1 INT, @var2 VARCHAR(20)`
  • 賦值用 `SELECT`:`SELECT @var1 = 32, @var2 = 'MyAge'` 或 `SELECT @var = col FROM table WHERE ...`
  • 若查詢無回傳列,變數值不變更(保留原值)

流程控制陳述式

IF...ELSE

IF (boolean_expression)
BEGIN
    -- 多行陳述式需 BEGIN...END
END
ELSE
BEGIN
    ...
END

WHILE 迴圈

WHILE (boolean_expression)
BEGIN
    statement(s)
    BREAK   -- 跳出迴圈
    CONTINUE -- 回到迴圈開頭
END
  • 巢狀迴圈中 `BREAK` 僅跳出目前層級
  • 內層結束後,外層後續陳述式才繼續執行

GOTO 與標籤

GOTO LabelName
...
LabelName: statement

打破循序執行,謹慎使用以免產生義大利麵條式程式碼。

RETURN

  • 無條件結束預存程序,後續程式碼不執行
  • 可回傳整數狀態碼(不可為 NULL)
  • 系統慣例:0 = 成功,負數 = 錯誤代碼
代碼含義代碼含義
0成功-8非致命內部問題
-1找不到物件-9系統極限
-2資料型別錯誤-10致命內部不一致
-3死鎖犧牲者-11致命內部不一致
-4權限錯誤-12資料表/索引損毀
-5語法錯誤-13資料庫損毀
-6混合使用者錯誤-14硬體錯誤
-7資源不足

游標在預存程序中的應用

當確實需要逐列處理時(如動態 SQL 組裝、複雜邏輯無法集合化),游標提供結果集逐列導航能力。參考第七課完整語法。

建議

  • 優先使用集合式 `UPDATE`/`INSERT`/`DELETE` 配合 `CASE`/`JOIN` 解決問題
  • 流程控制保持簡單,複雜邏輯拆分為多個預存程序或移至應用層
  • 錯誤處理:SQL Server 2000 僅有 `@@ERROR`,建議每關鍵操作後檢查並 `RETURN` 錯誤碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved