SQL Server儲存過程的基礎說明

2022-09-25 07:15:09 字數 3744 閱讀 2933

可以建立乙個過程供永久使用,或在乙個會話中臨時使用(區域性臨時過程),或在所有會話中臨時使用(全域性臨時過程)。

也可以建立在microsoft sql server啟動時自動執行的儲存過程。

語法 create proc [ edure ] procedure_name [ ; number ]

[ [ varying ] [ = default ] [ output ]

] [ ,...n ]

[ with

] [ for replication ]

as sql_statement [ ...n ]

引數 procedure_name

新儲存過程的名稱。過程名必須符合識別符號規則,且對於資料庫及其所有者必須唯一。有關更多資訊,請參見使用識別符號。

要建立區域性臨時過程,可以在 procedure_name 前面加乙個編號符 (#procedure程式設計客棧_name),要建立全域性臨時過程,可以在 procedure_name 前面加兩個編號符 (##procedure_name)。完整的名稱(包括 # 或 ##)不能超過 128 個字元。指定過程所有者的名稱是可選的。

;number

是可選的整數,用來對同名的過程分組,以便用一條 drop procedure 語句即可將同組的過程一起除去。例如,名為 orders 的應用程式使用的過程可以命名為 orderproc;1、orderproc;2 等。drop procedure orderproc 語句將除去整個組。如果名稱中包含定界識別符號,則數字不應包含在識別符號中,只應在 procedure_name 前後使用適當的定界符。

@parameter

過程中的引數。在 create procedure 語句中可以宣告乙個或多個引數。使用者必須在執行過程時提供每個所宣告引數的值(除非定義了該引數的預設值)。儲存過程最多可以有 2.100 個引數。

使用 @ 符號作為第乙個字元來指定引數名稱。引數名稱必須符合識別符號的規則。每個過程的引數僅用於該過程本身;相同的引數名稱可以用在其它過程中。預設情況下,引數只能代替常量,而不能用於代替表名、列名或其它資料庫物件的名稱。有關更多資訊,請參見 execute。

data_type

引數的資料型別。所有資料型別(包括 text、ntext 和 image)均可以用作儲存過程的引數。不過,cursor 資料型別只能用於 output 引數。如果指定的資料型別為 cursor,也必須同時指定 varying 和 output 關鍵字。有關 sql server 提供的資料型別及其語法的更多資訊,請參見資料型別。

說明 對於可以是 cursor 資料型別的輸出引數,沒有最大數目的限制。

varying

指定作為輸出引數支援的結果集(由儲存過程動態構造,內容可以變化)。僅適用於游標引數。

default

引數的預設值。如果定義了預設值,不必指定該引數的值即可執行過程。預設值必須是常量或 null。如果過程將對該引數使用 like 關鍵字,那麼預設值中可以包含萬用字元(%、_、 和 [^])。

output

表明引數是返回引數。該選項的值可以返回給 exec[ute]。使用 output 引數可將資訊返回給呼叫過程。text、ntext 和 image 引數可用作 output 引數。使用 output 關鍵字的輸出引數可以是游標佔位符。

表示最多可以指定 2.100 個引數的佔位符。

recompile 表明 sql server 不會快取該過程的計畫,該過程將在執行時重新編譯。在使用非典型值或臨時值而不希望覆蓋快取在記憶體中的執行計畫時,請使用 recompile 選項。

encryption 表示 sql server 加密 syscomments 表中包含 create procedure 語句文字的條目。使用 encryption 可防止將過程作為 sql server 複製的一部分發布。

說明 在公升級過程中,sql server 利用儲存在 syscomments 中的加密注釋來重新建立加密過程。

for replication

指定不能在訂閱伺服器上執行為複製建立的儲存過程。.使用 for replication 選項建立的儲存過程可用作儲存過程篩選,且只能在複製過程中執行。本選項不能和 with recompile 選項一起使用。

as 指定過程要執行的操作。

sql_statement

過程中要包含的任意數目和型別的 transact-sql 語句。但有一些限制。

是表示此過程可以包含多條 transact-sql 語句的佔位符。

注釋 儲存過程的最大大小為 128 mb。

使用者定義的儲存過程只能在當前資料庫中建立(臨時過程除外,臨時過程總是在 tempdb 中建立)。在單個批處理中,create procedure 語句不能與其它 transact-sql 語句組合使用。

預設情況下,引數可為空。如果傳遞 null 引數值並且該引數在 create 或 alter table 語句中使用,而該語句中引用的列又不允許使用 null,則 sql server 會產生一條錯誤資訊。為了防止向不允許使用 null 的列傳遞 null 引數值,應向過程中新增程式設計邏輯或為該列使用預設值(使用 create 或 www.cppcns.comalter table 的 default 關鍵字)。

建議在儲存過程的任何 create table 或 alter table 語句中都為每列顯式指定 null 或 not null,例如在建立臨時表時。ansi_dflt_on 和 ansi_dflt_off 選項控制 sql server 為列指派 null 或 not null 特性的方式(如果在 create table 或 alter table 語句中沒有指定的話)。如果某個連線執行的儲存過程對這些選項的設定與建立該過程的連線的設定不同,則為第二個連線建立的表列可能會有不同的為空性,並且表現出不同的行為方式。如果為每個列顯式宣告了 null 或 not null,那麼將對所有執行該儲存過程的連線使用相同的為空性建立臨時表。

在建立或更改儲存過程時,sql server 將儲存 set quoted_idwww.cppcns.comentifier 和 set ansi_nulls 的設定。執行儲存過程時,將使用這些原始設定。因此,所有客戶端會話的 set quoted_identifier 和 set ansi_nulls 設定在執行儲存過程時都將被忽略。在儲存過程**現的 set quoted_identifier 和 set ansi_nulls 語句不影響儲存過程的功能。

其它 set 選項(例如 set arithabort、set ansi_warnings 或 set ansi_paddings)在建立或更改儲存過程時不儲存。如果儲存過程的邏輯取決於特定的設定,應在過程開頭新增一條 語句,以確保設定正確。從儲存過程中執行 set 語句時,該設定只在儲存過程完成之前有效。之後,設定將恢復為呼叫儲存過程時的值。這使個別的客戶端可以設定所需的選項,而不會影響儲存過程的邏輯。

說明 sql server 是將空字串解釋為單個空格還是解釋為真正的空字串,由相容級別設定控制。如果相容級別小於或等於 65,sql server 就將空字串解釋為單個空格。如果相容級別等於 70,則 sql server 將空字串解釋為空字串。有關更多資訊,請參見 sp_dbcmptlevel。

獲得有關儲存過程的資訊

若要顯示用來建立過程的文字,請在過程所在的資料庫中執行 sp_helptext,並使用過程名作為引數。

說明 使用 encryption 選項建立的儲存過程不能使用 sp_helptext 檢視。

若要顯示有關過程引用的物件的報表,請使用 sp_depends。

若要為過程重新命名,請使用 sp_rename。

引用物件

SQLserver的儲存過程

儲存過程 create 是建立儲存過程,alter 是更改 改變儲存過程 在第一次寫儲存過程時用 create 若修改儲存過程程式之後,則 alter 替換create 再執行 在資料庫中 begin end 為大括號的意思 建立儲存過程的格式 procedure可簡寫為proc proc為程式 步...

sql server儲存過程

建立表的語句 create table student sno int primary key,sname nvarchar 30 sgentle nvarchar 2 sage int,sbirth smalldatetime,sdept nvarchar 30 drop table studen...

SQLSERVER儲存過程

sqlserver儲存過程使用說明書 引言首先介紹一下什麼是儲存過程 儲存過程就是將常用的或很複雜的工作,預先用 sql語句寫好並用乙個指定的名稱儲存起來,並且這樣的語句是放在資料庫中的,還可以根據條件執行不同 sql語句,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫 ex...