主頁(yè) > 知識(shí)庫(kù) > SQL Server存儲(chǔ)過(guò)程的基礎(chǔ)說(shuō)明

SQL Server存儲(chǔ)過(guò)程的基礎(chǔ)說(shuō)明

熱門標(biāo)簽:溫州語(yǔ)音外呼系統(tǒng)排名 四川穩(wěn)定外呼系統(tǒng)公司 AI智能云呼電話機(jī)器人怎么注冊(cè) 怎么在高德地圖標(biāo)注多個(gè)點(diǎn) 沈陽(yáng)外呼系統(tǒng)有效果嗎 商家地圖標(biāo)注圖片 福州外呼系統(tǒng)招商 電話機(jī)器人接口是什么樣的 百度地圖標(biāo)注信息怎么修改
可以創(chuàng)建一個(gè)過(guò)程供永久使用,或在一個(gè)會(huì)話中臨時(shí)使用(局部臨時(shí)過(guò)程),或在所有會(huì)話中臨時(shí)使用(全局臨時(shí)過(guò)程)。
也可以創(chuàng)建在Microsoft SQL Server啟動(dòng)時(shí)自動(dòng)運(yùn)行的存儲(chǔ)過(guò)程。
語(yǔ)法
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
參數(shù)
procedure_name
新存儲(chǔ)過(guò)程的名稱。過(guò)程名必須符合標(biāo)識(shí)符規(guī)則,且對(duì)于數(shù)據(jù)庫(kù)及其所有者必須唯一。有關(guān)更多信息,請(qǐng)參見(jiàn)使用標(biāo)識(shí)符。
要?jiǎng)?chuàng)建局部臨時(shí)過(guò)程,可以在 procedure_name 前面加一個(gè)編號(hào)符 (#procedure_name),要?jiǎng)?chuàng)建全局臨時(shí)過(guò)程,可以在 procedure_name 前面加兩個(gè)編號(hào)符 (##procedure_name)。完整的名稱(包括 # 或 ##)不能超過(guò) 128 個(gè)字符。指定過(guò)程所有者的名稱是可選的。
;number
是可選的整數(shù),用來(lái)對(duì)同名的過(guò)程分組,以便用一條 DROP PROCEDURE 語(yǔ)句即可將同組的過(guò)程一起除去。例如,名為 orders 的應(yīng)用程序使用的過(guò)程可以命名為 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 語(yǔ)句將除去整個(gè)組。如果名稱中包含定界標(biāo)識(shí)符,則數(shù)字不應(yīng)包含在標(biāo)識(shí)符中,只應(yīng)在 procedure_name 前后使用適當(dāng)?shù)亩ń绶?
@parameter
過(guò)程中的參數(shù)。在 CREATE PROCEDURE 語(yǔ)句中可以聲明一個(gè)或多個(gè)參數(shù)。用戶必須在執(zhí)行過(guò)程時(shí)提供每個(gè)所聲明參數(shù)的值(除非定義了該參數(shù)的默認(rèn)值)。存儲(chǔ)過(guò)程最多可以有 2.100 個(gè)參數(shù)。
使用 @ 符號(hào)作為第一個(gè)字符來(lái)指定參數(shù)名稱。參數(shù)名稱必須符合標(biāo)識(shí)符的規(guī)則。每個(gè)過(guò)程的參數(shù)僅用于該過(guò)程本身;相同的參數(shù)名稱可以用在其它過(guò)程中。默認(rèn)情況下,參數(shù)只能代替常量,而不能用于代替表名、列名或其它數(shù)據(jù)庫(kù)對(duì)象的名稱。有關(guān)更多信息,請(qǐng)參見(jiàn) EXECUTE。
data_type
參數(shù)的數(shù)據(jù)類型。所有數(shù)據(jù)類型(包括 text、ntext 和 image)均可以用作存儲(chǔ)過(guò)程的參數(shù)。不過(guò),cursor 數(shù)據(jù)類型只能用于 OUTPUT 參數(shù)。如果指定的數(shù)據(jù)類型為 cursor,也必須同時(shí)指定 VARYING 和 OUTPUT 關(guān)鍵字。有關(guān) SQL Server 提供的數(shù)據(jù)類型及其語(yǔ)法的更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)類型。
說(shuō)明 對(duì)于可以是 cursor 數(shù)據(jù)類型的輸出參數(shù),沒(méi)有最大數(shù)目的限制。
VARYING
指定作為輸出參數(shù)支持的結(jié)果集(由存儲(chǔ)過(guò)程動(dòng)態(tài)構(gòu)造,內(nèi)容可以變化)。僅適用于游標(biāo)參數(shù)。
default
參數(shù)的默認(rèn)值。如果定義了默認(rèn)值,不必指定該參數(shù)的值即可執(zhí)行過(guò)程。默認(rèn)值必須是常量或 NULL。如果過(guò)程將對(duì)該參數(shù)使用 LIKE 關(guān)鍵字,那么默認(rèn)值中可以包含通配符(%、_、[] 和 [^])。
OUTPUT
表明參數(shù)是返回參數(shù)。該選項(xiàng)的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數(shù)可將信息返回給調(diào)用過(guò)程。Text、ntext 和 image 參數(shù)可用作 OUTPUT 參數(shù)。使用 OUTPUT 關(guān)鍵字的輸出參數(shù)可以是游標(biāo)占位符。

表示最多可以指定 2.100 個(gè)參數(shù)的占位符。
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
RECOMPILE 表明 SQL Server 不會(huì)緩存該過(guò)程的計(jì)劃,該過(guò)程將在運(yùn)行時(shí)重新編譯。在使用非典型值或臨時(shí)值而不希望覆蓋緩存在內(nèi)存中的執(zhí)行計(jì)劃時(shí),請(qǐng)使用 RECOMPILE 選項(xiàng)。
ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語(yǔ)句文本的條目。使用 ENCRYPTION 可防止將過(guò)程作為 SQL Server 復(fù)制的一部分發(fā)布。
說(shuō)明 在升級(jí)過(guò)程中,SQL Server 利用存儲(chǔ)在 syscomments 中的加密注釋來(lái)重新創(chuàng)建加密過(guò)程。
FOR REPLICATION
指定不能在訂閱服務(wù)器上執(zhí)行為復(fù)制創(chuàng)建的存儲(chǔ)過(guò)程。.使用 FOR REPLICATION 選項(xiàng)創(chuàng)建的存儲(chǔ)過(guò)程可用作存儲(chǔ)過(guò)程篩選,且只能在復(fù)制過(guò)程中執(zhí)行。本選項(xiàng)不能和 WITH RECOMPILE 選項(xiàng)一起使用。
AS
指定過(guò)程要執(zhí)行的操作。
sql_statement
過(guò)程中要包含的任意數(shù)目和類型的 Transact-SQL 語(yǔ)句。但有一些限制。

是表示此過(guò)程可以包含多條 Transact-SQL 語(yǔ)句的占位符。
注釋
存儲(chǔ)過(guò)程的最大大小為 128 MB。
用戶定義的存儲(chǔ)過(guò)程只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建(臨時(shí)過(guò)程除外,臨時(shí)過(guò)程總是在 tempdb 中創(chuàng)建)。在單個(gè)批處理中,CREATE PROCEDURE 語(yǔ)句不能與其它 Transact-SQL 語(yǔ)句組合使用。
默認(rèn)情況下,參數(shù)可為空。如果傳遞 NULL 參數(shù)值并且該參數(shù)在 CREATE 或 ALTER TABLE 語(yǔ)句中使用,而該語(yǔ)句中引用的列又不允許使用 NULL,則 SQL Server 會(huì)產(chǎn)生一條錯(cuò)誤信息。為了防止向不允許使用 NULL 的列傳遞 NULL 參數(shù)值,應(yīng)向過(guò)程中添加編程邏輯或?yàn)樵摿惺褂媚J(rèn)值(使用 CREATE 或 ALTER TABLE 的 DEFAULT 關(guān)鍵字)。
建議在存儲(chǔ)過(guò)程的任何 CREATE TABLE 或 ALTER TABLE 語(yǔ)句中都為每列顯式指定 NULL 或 NOT NULL,例如在創(chuàng)建臨時(shí)表時(shí)。ANSI_DFLT_ON 和 ANSI_DFLT_OFF 選項(xiàng)控制 SQL Server 為列指派 NULL 或 NOT NULL 特性的方式(如果在 CREATE TABLE 或 ALTER TABLE 語(yǔ)句中沒(méi)有指定的話)。如果某個(gè)連接執(zhí)行的存儲(chǔ)過(guò)程對(duì)這些選項(xiàng)的設(shè)置與創(chuàng)建該過(guò)程的連接的設(shè)置不同,則為第二個(gè)連接創(chuàng)建的表列可能會(huì)有不同的為空性,并且表現(xiàn)出不同的行為方式。如果為每個(gè)列顯式聲明了 NULL 或 NOT NULL,那么將對(duì)所有執(zhí)行該存儲(chǔ)過(guò)程的連接使用相同的為空性創(chuàng)建臨時(shí)表。
在創(chuàng)建或更改存儲(chǔ)過(guò)程時(shí),SQL Server 將保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的設(shè)置。執(zhí)行存儲(chǔ)過(guò)程時(shí),將使用這些原始設(shè)置。因此,所有客戶端會(huì)話的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設(shè)置在執(zhí)行存儲(chǔ)過(guò)程時(shí)都將被忽略。在存儲(chǔ)過(guò)程中出現(xiàn)的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 語(yǔ)句不影響存儲(chǔ)過(guò)程的功能。
其它 SET 選項(xiàng)(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在創(chuàng)建或更改存儲(chǔ)過(guò)程時(shí)不保存。如果存儲(chǔ)過(guò)程的邏輯取決于特定的設(shè)置,應(yīng)在過(guò)程開(kāi)頭添加一條 SET 語(yǔ)句,以確保設(shè)置正確。從存儲(chǔ)過(guò)程中執(zhí)行 SET 語(yǔ)句時(shí),該設(shè)置只在存儲(chǔ)過(guò)程完成之前有效。之后,設(shè)置將恢復(fù)為調(diào)用存儲(chǔ)過(guò)程時(shí)的值。這使個(gè)別的客戶端可以設(shè)置所需的選項(xiàng),而不會(huì)影響存儲(chǔ)過(guò)程的邏輯。
說(shuō)明 SQL Server 是將空字符串解釋為單個(gè)空格還是解釋為真正的空字符串,由兼容級(jí)別設(shè)置控制。如果兼容級(jí)別小于或等于 65,SQL Server 就將空字符串解釋為單個(gè)空格。如果兼容級(jí)別等于 70,則 SQL Server 將空字符串解釋為空字符串。有關(guān)更多信息,請(qǐng)參見(jiàn) sp_dbcmptlevel。
獲得有關(guān)存儲(chǔ)過(guò)程的信息
若要顯示用來(lái)創(chuàng)建過(guò)程的文本,請(qǐng)?jiān)谶^(guò)程所在的數(shù)據(jù)庫(kù)中執(zhí)行 sp_helptext,并使用過(guò)程名作為參數(shù)。
說(shuō)明 使用 ENCRYPTION 選項(xiàng)創(chuàng)建的存儲(chǔ)過(guò)程不能使用 sp_helptext 查看。
若要顯示有關(guān)過(guò)程引用的對(duì)象的報(bào)表,請(qǐng)使用 sp_depends。
若要為過(guò)程重命名,請(qǐng)使用 sp_rename。
引用對(duì)象
SQL Server 允許創(chuàng)建的存儲(chǔ)過(guò)程引用尚不存在的對(duì)象。在創(chuàng)建時(shí),只進(jìn)行語(yǔ)法檢查。執(zhí)行時(shí),如果高速緩存中尚無(wú)有效的計(jì)劃,則編譯存儲(chǔ)過(guò)程以生成執(zhí)行計(jì)劃。只有在編譯過(guò)程中才解析存儲(chǔ)過(guò)程中引用的所有對(duì)象。因此,如果語(yǔ)法正確的存儲(chǔ)過(guò)程引用了不存在的對(duì)象,則仍可以成功創(chuàng)建,但在運(yùn)行時(shí)將失敗,因?yàn)樗玫膶?duì)象不存在。有關(guān)更多信息,請(qǐng)參見(jiàn)延遲名稱解析和編譯。
延遲名稱解析和兼容級(jí)別
SQL Server 允許 Transact-SQL 存儲(chǔ)過(guò)程在創(chuàng)建時(shí)引用不存在的表。這種能力稱為延遲名稱解析。不過(guò),如果 Transact-SQL 存儲(chǔ)過(guò)程引用了該存儲(chǔ)過(guò)程中定義的表,而兼容級(jí)別設(shè)置(通過(guò)執(zhí)行 sp_dbcmptlevel 來(lái)設(shè)置)為 65,則在創(chuàng)建時(shí)會(huì)發(fā)出警告信息。而如果在運(yùn)行時(shí)所引用的表不存在,將返回錯(cuò)誤信息。有關(guān)更多信息,請(qǐng)參見(jiàn) sp_dbcmptlevel 和延遲名稱解析和編譯。
執(zhí)行存儲(chǔ)過(guò)程
成功執(zhí)行 CREATE PROCEDURE 語(yǔ)句后,過(guò)程名稱將存儲(chǔ)在 sysobjects 系統(tǒng)表中,而 CREATE PROCEDURE 語(yǔ)句的文本將存儲(chǔ)在 syscomments 中。第一次執(zhí)行時(shí),將編譯該過(guò)程以確定檢索數(shù)據(jù)的最佳訪問(wèn)計(jì)劃。
使用 cursor 數(shù)據(jù)類型的參數(shù)
存儲(chǔ)過(guò)程只能將 cursor 數(shù)據(jù)類型用于 OUTPUT 參數(shù)。如果為某個(gè)參數(shù)指定了 cursor 數(shù)據(jù)類型,也必須指定 VARYING 和 OUTPUT 參數(shù)。如果為某個(gè)參數(shù)指定了 VARYING 關(guān)鍵字,則數(shù)據(jù)類型必須是 cursor,并且必須指定 OUTPUT 關(guān)鍵字。
您可能感興趣的文章:
  • SQL Server存儲(chǔ)過(guò)程入門學(xué)習(xí)
  • 深入sql server 2005 萬(wàn)能分頁(yè)存儲(chǔ)過(guò)程的詳解
  • 基于Sql Server通用分頁(yè)存儲(chǔ)過(guò)程的解決方法
  • SQL Server 分頁(yè)查詢存儲(chǔ)過(guò)程代碼
  • SQL Server 存儲(chǔ)過(guò)程解析
  • SQL Server常用存儲(chǔ)過(guò)程及示例

標(biāo)簽:邯鄲 七臺(tái)河 西寧 汕尾 無(wú)錫 營(yíng)口 寶雞 來(lái)賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server存儲(chǔ)過(guò)程的基礎(chǔ)說(shuō)明》,本文關(guān)鍵詞  SQL,Server,存儲(chǔ),過(guò)程,的,基礎(chǔ),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server存儲(chǔ)過(guò)程的基礎(chǔ)說(shuō)明》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于SQL Server存儲(chǔ)過(guò)程的基礎(chǔ)說(shuō)明的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章