CREATE PROC[EDURE] procedure_name [; number]
[ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ]
[ FOR REPLICATION ]
AS
sql_statement [ ...n ]
| 元素 | 說明 |
|---|---|
procedure_name | 名稱唯一,可加 `#`(區域暫存)或 `##`(全域暫存)。建議指定結構描述(如 `dbo.usp_Name`)。 |
;number | 選用整數,同名程序分組,單一 `DROP PROCEDURE name` 可刪除整組。 |
@parameter | 參數名稱以 `@` 開頭,最多 2100 個。預設只能替代常數,不可代替資料表/欄位名稱。 |
data_type | 所有型別皆可,含 `text/ntext/image`。`cursor` 僅限 `OUTPUT` 參數且需加 `VARYING`。 |
VARYING | 僅用於游標輸出參數,表示結果集動態構造。 |
default | 常數或 NULL。可含萬用字元(`%` `_` `[]` `[^]`)供 `LIKE` 使用。 |
OUTPUT | 標記為回傳參數,值可傳回呼叫端。`text/ntext/image` 可作 OUTPUT。 |
WITH RECOMPILE | 不快取計畫,每次執行重新編譯。適用非典型參數值、避免參數探查問題。 |
WITH ENCRYPTION | 加密 `syscomments` 文字,防止檢視定義。升級時利用加密註釋重建。 |
FOR REPLICATION | 僅複寫程序可執行,不可直接呼叫。不可與 `RECOMPILE` 合用。 |
AS sql_statement | 程序主體,可含多條 T-SQL 陳述式。 |
預存程序**不得包含**建立資料庫物件的陳述式:
CREATE TABLE; CREATE VIEW; CREATE DEFAULT; CREATE RULE; CREATE TRIGGER; CREATE PROCEDURE