- 變量定義
- 語法:DECLARE @variable_name data_type [ , @variable_name data_type ... ]
- 說明:
- 變量定義的時候,變量名必須以@開頭
- 以兩個@開頭的變量是全局變量,如@@FETCH_STATUS、@@VERSION等
- 變量賦值
- 語法:SELECT @variable_name = 值 或 SET @variable_name = 值
- 游標定義
- 語法:DECLARE cursor_name CURSOR FOR select_statement
- 說明:游標定義的時候,游標名不必以@開頭
- 打開游標
- 語法:OPEN cursor_name
- 關閉游標
- 語法:CLOSE cursor_name
- 刪除游標引用
- 語法:DEALLOCATE cursor_name
- 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 。
- NEXT:緊跟當前行返回結果行,並且當前行遞增為返回行。如果
- 說明:根據全局變量@@FETCH_STATUS可判斷上一個
FETCH語句執行的狀態。 -
返回值 描述 0 FETCH 語句成功。 -1 FETCH 語句失敗或行不在結果集中。 -2 提取的行不存在。 -9 游標未執行提取操作。
- WHILE
- 語法:
- WHILE boolean_expression
- statement
- 說明:statement含多條語句時,必須以BEGIN 開頭,END結尾。
- 語法:
- BREAK
- 語法:BREAK
- 說明:跳出循環時使用BREAK
- CONTINUE
- 語法:CONTINUE
- 說明:中止本次循環執行下一次循環時使用CONTINUE
- IF
- 語法:
- IF boolean_expression
- if_statement
- ELSE
- else_statement
- 說明:if_statement或else_statement含多條語句時,必須以BEGIN 開頭,END結尾。
- 語法:
- GOTO & label
- 語法:
- GOTO label_name
- label_name:
- 語法:
- 創建帶參數的存儲過程
- 語法:
-
CREATE PROC[EDURE] procedure_name
@parameter_name date_type [ = default_value] [ OUTPUT ],
@parameter_name date_type [ = default_value] [ OUTPUT ],...
AS
BEGINstatements
END
-
- 語法:
- 執行存儲過程
- EXECUTE/EXEC procedure_name [@parameter_name [OUTPUT] [ , @parameter_name [OUTPUT]... ]]
- 說明:
- @parameter_name是傳入存儲過程的對應參數的值
- 如果要執行的存儲過程的參數帶OUTPUT,則執行語句中對應參數也要帶OUTPUT
- 如果要執行的存儲過程的參數設置了默認值
- 如果是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可省略該參數的傳值
- 如果不是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可用DEFAULT代替該參數的傳值
- 刪除存儲過程
- 語法:DROP PROCEDURE procedure_name
- 創建帶參數的方法
- 語法:
-
CREATE FUNCTION function_name
(@parameter_name date_type [ = default_value],
@parameter_name date_type [ = default_value],...)
RETURN return_type AS
BEGINstatements
END
-
- 說明:方法的參數不能設置為OUTPUT
- 語法:
- 調用方法
- SELECT 或 INSERT 語句中可調用方法
- 必須指定方法的所有者
- 例:SELECT dbo.func_test(1,2)
- 如果要調用的方法的參數設置了默認值
- 如果是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可省略該參數的傳值
- 如果不是最后一個參數設置了默認值,且該參數以默認值執行,則執行語句中可用DEFAULT代替該參數的傳值
- 刪除方法
- 語法:DROP FUNCTION function_name
- RAISEERROR
- 語法:RAISEERROR ( msg, severity, state, argument [ , argument ... ] )
- 說明:
- msg:消息字符串或消息ID
- severity:重要度(0~18任意用戶可使用,19~25只有sysadmin的用戶可使用)
- state:狀態(1~127)
- argument:替換msg中變量(如%d、%s等)
- 例:
數據:

存儲過程:

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