SQLSERVER存儲過程基本語法


  1. 變量定義
    • 語法:DECLARE @variable_name data_type [ , @variable_name data_type ... ]
    • 說明:
      • 變量定義的時候,變量名必須以@開頭
      • 以兩個@開頭的變量是全局變量,如@@FETCH_STATUS、@@VERSION等
  2. 變量賦值
    • 語法:SELECT @variable_name = 值 或 SET @variable_name = 值
  3. 游標定義
    • 語法:DECLARE cursor_name CURSOR FOR select_statement
    • 說明:游標定義的時候,游標名不必以@開頭
  4. 打開游標
    • 語法:OPEN cursor_name
  5. 關閉游標
    • 語法:CLOSE cursor_name
  6. 刪除游標引用
    • 語法:DEALLOCATE cursor_name
  7. FETCH
    • 語法:FETCH [ command ] FROM cursor_name [ INTO @variable_name [ , @variable_name ] ]
    • command:NEXT、PRIOR、FIRST、LAST、ABSOLUTE n、RELATIVE n
      • NEXT:緊跟當前行返回結果行,並且當前行遞增為返回行。如果 FETCH NEXT 為對游標的第一次提取操作,則返回結果集中的第一行。 NEXT 為默認的游標提取選項。
      • PRIOR:返回緊鄰當前行前面的結果行,並且當前行遞減為返回行。如果 FETCH PRIOR 為對游標的第一次提取操作,則沒有行返回並且游標置於第一行之前。
      • FIRST:返回游標中的第一行並將其作為當前行。
      • LAST:返回游標中的最后一行並將其作為當前行。
      • ABSOLUTE n:如果 n 或 @nvar 為正,則返回從游標起始處開始向后的第 n 行,並將返回行變成新的當前行 。 如果 n 或 @nvar 為負,則返回從游標末尾處開始向前的第 n 行,並將返回行變成新的當前行 。 如果 n 或 @nvar 為 0,則不返回行 。 n 必須是整數常量,並且 @nvar 必須是 smallint、tinyint 或 int 。
      • RELATIVE n:如果 n 或 @nvar 為正,則返回從當前行開始向后的第 n 行,並將返回行變成新的當前行 。 如果 n 或 @nvar 為負,則返回從當前行開始向前的第 n 行,並將返回行變成新的當前行 。 如果 n 或 @nvar 為 0,則返回當前行 。 在對游標進行第一次提取時,如果在將 n 或 @nvar 設置為負數或 0 的情況下指定 FETCH RELATIVE,則不返回行 。 n 必須是整數常量,並且 @nvar 必須是 smallint、tinyint 或 int 。
    • 說明:根據全局變量@@FETCH_STATUS可判斷上一個 FETCH 語句執行的狀態。
    • 返回值 描述
       0 FETCH 語句成功。
      -1 FETCH 語句失敗或行不在結果集中。
      -2 提取的行不存在。
      -9 游標未執行提取操作。
  8. WHILE
    • 語法:
      • WHILE boolean_expression
      • statement
    • 說明:statement含多條語句時,必須以BEGIN 開頭,END結尾。
  9. BREAK
    • 語法:BREAK
    • 說明:跳出循環時使用BREAK
  10. CONTINUE
    • 語法:CONTINUE
    • 說明:中止本次循環執行下一次循環時使用CONTINUE
  11. IF
    • 語法:
      • IF boolean_expression
      • if_statement
      • ELSE
      • else_statement
    • 說明:if_statement或else_statement含多條語句時,必須以BEGIN 開頭,END結尾。
  12. GOTO & label
    • 語法:
      • GOTO label_name
      • label_name:
  13. 創建帶參數的存儲過程
    • 語法:
      • CREATE PROC[EDURE] procedure_name 

         @parameter_name date_type [ = default_value] [ OUTPUT ],
         @parameter_name date_type [ = default_value] [ OUTPUT ],
         ...
        AS
        BEGIN
            statements 
        END
  14. 執行存儲過程
    • EXECUTE/EXEC procedure_name [@parameter_name [OUTPUT] [ , @parameter_name [OUTPUT]... ]]
    • 說明:
      • @parameter_name是傳入存儲過程的對應參數的值
      • 如果要執行的存儲過程的參數帶OUTPUT,則執行語句中對應參數也要帶OUTPUT
      • 如果要執行的存儲過程的參數設置了默認值
        • 如果是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可省略該參數的傳值
        • 如果不是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可用DEFAULT代替該參數的傳值
  15. 刪除存儲過程
    • 語法:DROP PROCEDURE procedure_name
  16. 創建帶參數的方法
    • 語法:
      • CREATE FUNCTION function_name 

         (@parameter_name date_type [ = default_value],
         @parameter_name date_type [ = default_value],
         ...)
        RETURN return_type AS
        BEGIN
            statements 
        END
    • 說明:方法的參數不能設置為OUTPUT
  17. 調用方法
    • SELECT 或 INSERT 語句中可調用方法
    • 必須指定方法的所有者
    • 例:SELECT dbo.func_test(1,2)
    • 如果要調用的方法的參數設置了默認值
      • 如果是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可省略該參數的傳值
      • 如果不是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可用DEFAULT代替該參數的傳值
  18. 刪除方法
    • 語法:DROP FUNCTION function_name
  19. RAISEERROR
    • 語法:RAISEERROR ( msg, severity, state, argument [ , argument ... ] )
    • 說明:
      • msg:消息字符串或消息ID
      • severity:重要度(0~18任意用戶可使用,19~25只有sysadmin的用戶可使用)
      • state:狀態(1~127)
      • argument:替換msg中變量(如%d、%s等)
  20. 例:

數據:

存儲過程:

聲明:本文是本人查閱網上及書籍等各種資料,再加上自己的實際測試總結而來,僅供學習交流用,請勿使用於商業用途,任何由此產生的法律版權問題概不負責,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM