亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

存儲過程簡介

2024-07-21 02:52:17
字體:
來源:轉載
供稿:網友

什么是存儲過程:存儲過程可以說是一個記錄集吧,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然后再給這個代碼塊取一個名字,在用到這個功能的時候調用他就行了。

優勢:

1、提高性能 SQL語句在創建過程時進行分析和編譯。 存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,并給出最終被存在系統表中的存儲計劃,這樣,在執行過程時便可節省此開銷。 2、降低網絡開銷 存儲過程調用時只需用提供存儲過程名和必要的參數信息,從而可降低網絡的流量。 3、便于進行代碼移植 數據庫專業人員可以隨時對存儲過程進行修改,但對應用程序源代碼卻毫無影響,從而極大的提高了程序的可移植性。 4、更強的安全性 1)系統管理員可以對執行的某一個存儲過程進行權限限制,避免非授權用戶對數據的訪問 2)在通過網絡調用過程時,只有對執行過程的調用是可見的。 因此,惡意用戶無法看到表和數據庫對象名稱、嵌入自己的 Transact-SQL 語句或搜索關鍵數據。 3)使用過程參數有助于避免 SQL 注入攻擊。 因為參數輸入被視作文字值而非可執行代碼,所以,攻擊者將命令插入過程內的 Transact-SQL 語句并損害安全性將更為困難。 4)可以對過程進行加密,這有助于對源代碼進行模糊處理。

劣勢:

1、存儲過程需要專門的數據庫開發人員進行維護,但實際情況是,往往由程序開發員人員兼職

2、設計邏輯變更,修改存儲過程沒有SQL靈活

--------------創建存儲過程-----------------CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ][ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]--------------調用存儲過程-----------------EXECUTE Procedure_name '' --存儲過程如果有參數,后面加參數格式為:@參數名=value,也可直接為參數值value--------------刪除存儲過程-----------------drop procedure procedure_name --在存儲過程中能調用另外一個存儲過程,而不能刪除另外一個存儲過程

創建存儲過程的參數: 1.procedure_name :存儲過程的名稱,在前面加#為局部臨時存儲過程,加##為全局臨時存儲過程。

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

3.@parameter: 存儲過程的參數??梢杂幸粋€或多個。用戶必須在執行過程時提供每個所聲明參數的值(除非定義了該參數的默認值)。存儲過程最多可以有 2.100 個參數。 使用 @ 符號作為第一個字符來指定參數名稱。參數名稱必須符合標識符的規則。每個過程的參數僅用于該過程本身;相同的參數名稱可以用在其它過程中。默認情況下,參數只能代替常量,而不能用于代替表名、列名或其它數據庫對象的名稱。有關更多信息,請參見 EXECUTE。

4.data_type:參數的數據類型。所有數據類型(包括 text、ntext 和 image)均可以用作存儲過程的參數。不過,cursor 數據類型只能用于 OUTPUT 參數。如果指定的數據類型為 cursor,也必須同時指定 VARYING 和 OUTPUT 關鍵字。有關 SQL Server 提供的數據類型及其語法的更多信息,請參見數據類型。 說明 對于可以是 cursor 數據類型的輸出參數,沒有最大數目的限制。

5.VARYING: 指定作為輸出參數支持的結果集(由存儲過程動態構造,內容可以變化)。僅適用于游標參數。

6.default: 參數的默認值。如果定義了默認值,不必指定該參數的值即可執行過程。默認值必須是常量或 NULL。如果過程將對該參數使用 LIKE 關鍵字,那么默認值中可以包含通配符(%、_、[] 和 [^])。

7.OUTPUT :表明參數是返回參數。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數可將信息返回給調用過程。Text、ntext 和 image 參數可用作 OUTPUT 參數。使用 OUTPUT 關鍵字的輸出參數可以是游標占位符。

8.RECOMPILE: 表明 SQL Server 不會緩存該過程的計劃,該過程將在運行時重新編譯。在使用非典型值或臨時值而不希望覆蓋緩存在內存中的執行計劃時,請使用 RECOMPILE 選項。

9.ENCRYPTION: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文本的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 復制的一部分發布。 說明 在升級過程中,SQL Server 利用存儲在 syscomments 中的加密注釋來重新創建加密過程。

10.FOR REPLICATION :指定不能在訂閱服務器上執行為復制創建的存儲過程。.使用 FOR REPLICATION 選項創建的存儲過程可用作存儲過程篩選,且只能在復制過程中執行。本選項不能和 WITH RECOMPILE 選項一起使用。

11.AS :指定過程要執行的操作。

12.sql_statement :過程中要包含的任意數目和類型的 Transact-SQL 語句。但有一些限制。

小結:看過這些基本語法后,下面我就根據語法創建各式的存儲過程。

創建存儲過程

這里寫圖片描述 針對上面的表,我使用存儲過程對它做一些操作:

1. 只返回單一記錄集的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure GetUserAccountasselect * from UserAccountgo-------------執行上面的存儲過程----------------exec GetUserAccount

結果:相當于運行 select * from UserAccount 這行代碼,結果為整個表的數據。

2.沒有輸入輸出的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure inUserAccountasinsert into UserAccount (UserName,[PassWord],RegisterTime,Registerip) values(9,9,'2013-01-02',9)go-------------執行上面的存儲過程----------------exec inUserAccount

結果:相當于運行 insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(9,9,’2013-01-02’,9) 這行代碼。

3.有返回值的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure inUserAccountReasinsert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(10,10,'2013-01-02',10)return @@rowcountgo-------------執行上面的存儲過程----------------exec inUserAccountRe

解釋:這里的@@rowcount為執行存儲過程影響的行數,執行的結果是不僅插入了一條數據,還返回了一個值即 return value =1 ,這個可以在程序中獲取,稍后在c#調用存儲過程中會有說到。

4.有輸入參數和輸出參數的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure GetUserAccountRe@UserName nchar(20),@UserID int outputasif(@UserName>5)select @UserID=COUNT(*) from UserAccount where UserID>25elseset @UserID=1000go-------------執行上面的存儲過程----------------exec GetUserAccountRe '7',null

解釋:@UserName為輸入參數,@UserID為輸出參數。 運行結果為@userID為COOUT(*)即 =1。

5. 同時具有返回值、輸入參數、輸出參數的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure GetUserAccountRe1@UserName nchar(20),@UserID int outputasif(@UserName>5)select @UserID=COUNT(*) from UserAccount where UserID>25elseset @UserID=1000return @@rowcountgo-------------執行上面的存儲過程----------------exec GetUserAccountRe1 '7',null

結果:@userID為COOUT(*)即 =1,Retun Value=1。

6.同時返回參數和記錄集的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure GetUserAccountRe2@UserName nchar(20),@UserID int outputasif(@UserName>5)select @UserID=COUNT(*) from UserAccount where UserID>25elseset @UserID=1000select * from UserAccountreturn @@rowcountgo-------------執行上面的存儲過程----------------exec GetUserAccountRe2 '7',null

結果:返回執行 select * from UserAccount 這句代碼的結果集,同時@userID為COOUT(*)即 =1,Retun Value=9。

7.返回多個記錄集的存儲過程

-------------創建名為GetUserAccount的存儲過程----------------create Procedure GetUserAccountRe3asselect * from UserAccountselect * from UserAccount where UserID>5go-------------執行上面的存儲過程----------------exec GetUserAccountRe3

結果:返回兩個結果集,一個為 select * from UserAccount,另一個為 select * from UserAccount where UserID>5 。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲午夜久久久影院| 亚洲欧美另类人妖| 成人xvideos免费视频| 亚洲日韩欧美视频| 亚洲wwwav| 亚洲香蕉成视频在线观看| 精品高清一区二区三区| 狠狠干狠狠久久| 成人av电影天堂| 欧美日韩亚洲视频| 夜夜嗨av色一区二区不卡| 久久伊人91精品综合网站| 亚洲国产另类 国产精品国产免费| 日韩av免费在线看| 91免费看片网站| 岛国视频午夜一区免费在线观看| 动漫精品一区二区| 亚洲精品国产精品久久清纯直播| 亚洲最大的免费| 国产精品久久精品| 综合久久五月天| 粉嫩老牛aⅴ一区二区三区| 国产精品成av人在线视午夜片| 欧美成人精品一区二区| 欧美日韩一区二区三区在线免费观看| 97香蕉超级碰碰久久免费软件| 成人高h视频在线| 亚洲精品一区中文| xxx成人少妇69| xxav国产精品美女主播| 韩曰欧美视频免费观看| 日韩成人中文字幕在线观看| 国产a∨精品一区二区三区不卡| 88国产精品欧美一区二区三区| 欧美在线一级va免费观看| 色综合91久久精品中文字幕| 亚洲第一精品夜夜躁人人爽| 欧美日韩一区免费| 国产亚洲精品久久久久久牛牛| 亚洲精品美女网站| 国产精品免费小视频| 国产精品视频网站| www.日韩免费| 亚洲欧美日韩精品久久奇米色影视| 国产精品wwww| 性色av一区二区三区免费| 国产精品久久久av久久久| 久久久久久亚洲精品中文字幕| 国产成人精品久久久| 精品国产一区二区三区久久狼5月| 国外色69视频在线观看| 97国产一区二区精品久久呦| 国产精品高潮在线| 亚洲欧美日韩天堂| 88国产精品欧美一区二区三区| 国产日产亚洲精品| 亚洲国产欧美一区二区丝袜黑人| 在线观看日韩视频| 日韩av片永久免费网站| 亚洲一区中文字幕在线观看| 亚洲高清av在线| 欧美色videos| 国产亚洲a∨片在线观看| 欧美日韩国产123| 国产精品欧美亚洲777777| 日韩av在线天堂网| 精品国产精品三级精品av网址| 亚洲xxxx18| 日韩电影在线观看永久视频免费网站| 亚洲最大成人在线| 欧美电影电视剧在线观看| 欧美视频免费在线观看| 久久精品夜夜夜夜夜久久| 久久亚洲精品毛片| 国产精品免费久久久久影院| 伊人精品在线观看| 欧美激情在线播放| 日韩大片在线观看视频| 成人网在线视频| 欧美性黄网官网| 国产日韩欧美日韩| 日韩av电影国产| www.日韩不卡电影av| 亚洲性日韩精品一区二区| 亚洲欧洲国产一区| 欧美一区二粉嫩精品国产一线天| 国产精品网站大全| 狠狠色狠狠色综合日日小说| 亚洲精品按摩视频| 亚洲天堂免费视频| 亚洲综合日韩中文字幕v在线| 欧美电影免费观看电视剧大全| 日韩免费av片在线观看| 中文字幕日韩精品在线观看| 国产精品永久免费观看| 国产欧美精品一区二区三区介绍| 亚洲精品一区二区三区婷婷月| 91视频国产一区| 亚洲大胆美女视频| 57pao国产成人免费| 精品国产999| 中文字幕亚洲字幕| 亚洲毛茸茸少妇高潮呻吟| 国产成人激情小视频| 97香蕉久久夜色精品国产| 日本欧美在线视频| 日韩黄色高清视频| 大胆欧美人体视频| 97高清免费视频| 成人国产在线激情| 萌白酱国产一区二区| 亚洲人成伊人成综合网久久久| 日韩精品在线免费观看| 欧日韩不卡在线视频| 欧美激情精品久久久久久蜜臀| 亚洲午夜久久久影院| 日韩精品视频免费在线观看| 91精品久久久久久久| 成人久久精品视频| 国产精品丝袜高跟| 在线视频免费一区二区| 亚洲理论在线a中文字幕| 成人精品久久一区二区三区| 日韩在线观看免费网站| 国产午夜精品理论片a级探花| 中文字幕不卡在线视频极品| 亚洲国产日韩欧美在线动漫| 成人黄色av免费在线观看| 国产欧美一区二区三区久久| 国产精品久久在线观看| 九九热精品在线| 一本一道久久a久久精品逆3p| 亚洲精品乱码久久久久久金桔影视| 国产精品欧美日韩久久| 久久九九有精品国产23| 国产精品香蕉在线观看| 国产精品久久999| 日韩精品免费电影| 尤物精品国产第一福利三区| 欧美一区二区大胆人体摄影专业网站| 亚洲在线观看视频| 亚洲精品久久久久久久久久久| 亚洲天堂网在线观看| 欧美激情国产日韩精品一区18| 国产成人一区二区| 亚洲第一网中文字幕| 羞羞色国产精品| 中文字幕一区二区三区电影| 国产精品久久中文| 国产精品免费视频xxxx| 国产裸体写真av一区二区| 欧美激情高清视频| 国产亚洲精品久久久久久777| 国产精品高精视频免费| 国产亚洲综合久久| 久久精视频免费在线久久完整在线看| 久久久欧美精品| 国产精品一区久久| 国产精品久久久久久久久男| 清纯唯美日韩制服另类| 欧美影院久久久| 日本精品免费一区二区三区| 日韩中文字幕在线观看| 亚洲性无码av在线|