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

首頁 > 數據庫 > SQL Server > 正文

數據庫存儲過程 — Sql Server

2024-08-31 00:55:30
字體:
來源:轉載
供稿:網友
數據庫存儲過程 — Sql Server

MySQL、Oracle等主流關系型數據庫基本都支持存儲過程,這里使用Sql Server為例進行說明。

存儲過程的概念:

Sql Server存儲過程

SQL Server 中的存儲過程是由一個或多個 Transact-SQL 語句或對 Microsoft .NET Framework 公共語言運行時 (CLR) 方法的引用構成的一個組。 簡單的說,非常類似與java中的方法,實質就是部署在數據庫端的一組定義代碼以及SQL。

存儲過程的作用(優點):

1.代碼的重復使用

任何重復的數據庫操作的代碼都非常適合于在過程中進行封裝。 這消除了不必要地重復編寫相同的代碼、降低了代碼不一致性,并且允許擁有所需權限的任何用戶或應用程序訪問和執行代碼。

2.更強的安全性

多個用戶和客戶端程序可以通過過程對基礎數據庫對象執行操作,即使用戶和程序對這些基礎對象沒有直接權限。 過程控制執行哪些進程和活動,并且保護基礎數據庫對象。 這消除在了單獨的對象級別授予權限的要求,并且簡化了安全層。

3.更容易維護

在客戶端應用程序調用過程并且將數據庫操作保持在數據層中時,對于基礎數據庫中的任何更改,只有過程是必須更新的。 應用程序層保持獨立,并且不必知道對數據庫布局、關系或進程的任何更改的情況。

4.改進的性能

默認情況下,在首次執行過程時將編譯過程,并且創建一個執行計劃,供以后的執行重復使用。 因為查詢處理器不必創建新計劃,所以,它通常用更少的時間來處理過程。

5.減少了服務器/客戶端網絡流量

過程中的命令作為代碼的單個批處理執行。 這可以顯著減少服務器和客戶端之間的網絡流量,因為只有對執行過程的調用才會跨網絡發送。 如果沒有過程提供的代碼封裝,每個單獨的代碼行都不得不跨網絡發送。

可以類比成java中的基礎類庫。總之就是高性能、安全、復用、易維護。

存儲過程的類型:

1.用戶定義

用戶定義的過程可在用戶定義的數據庫中創建,或者在除了 Resource 數據庫之外的所有系統數據庫中創建。

2.臨時

臨時過程是用戶定義過程的一種形式。 臨時過程與永久過程相似,只是臨時過程存儲于 tempdb 中。

3.系統

系統過程是 SQL Server 隨附的。 它們物理上存儲在內部隱藏的 Resource 數據庫中,但邏輯上出現在每個系統定義數據庫和用戶定義數據庫的 sys 架構中。

4.擴展的用戶定義過程(DePRecated,將被CLR存儲過程替代,以后再專門開貼)

通過擴展的過程,可以使用 Java 之類的編程語言創建外部例程。 這些過程是 SQL Server 實例可以動態加載和運行的 DLL。

創建表(Sql Server 2005)
  1. 打開Microsoft SQL Server Management Studio
  2. 建表表Sql語句:
CREATE TABLE [user](userId int,userName NVARCHAR[20],passWord NVARCHAR[20]);

  3. 再隨便填入一些數據。

  4. 打開查詢分析器,創建存儲過程,如圖。

使用存儲過程:

先來看一個簡單的存儲過程定義(我個人認為先看實例,再看語法是最好的學習方式,因為一開始上來就看語法,會讓人摸不著北):

1.不帶參數

存儲過程Name = select_del,獲取user表中的全部記錄。

1 CREATE PROCEDURE proc_select_user2 AS3     BEGIN4         SELECT * FROM [user]5     END6 GO

執行:

EXECUTE proc_select_user;
2.帶輸入參數

存儲過程Name = proc_find_by_id_range,獲取user表中Id在給定范圍內的所有記錄。

1 CREATE PROCEDURE proc_find_by_id_range(@startId INT, @endId INT)2 AS3     BEGIN4         SELECT * FROM [user] WHERE userId BETWEEN @startId AND @endId5     END6 GO 

執行:

EXECUTE proc_find_by_id_range @startId = 10000,@endId = 10100;

3.帶輸入輸出參數

存儲過程Name = proc_find_userName_by_id,通過id獲取userName。

 1 CREATE PROCEDURE proc_find_userName_by_id 2    @userId INT, 3    @userName NVARCHAR(20) OUTPUT 4 AS 5     BEGIN 6         SELECT @userName = userName 7         FROM [user] 8         WHERE userId = @userId 9     END10 GO

執行:

1 DECLARE @userName NVARCHAR(20);2 EXECUTE proc_find_userName_by_id 10004,@userName OUTPUT;(這邊如果用@變量 = OUTPUT會報錯,所以換一種寫法)3 SELECT @userName as 'result';
4.帶返回狀態

存儲過程Name = proc_check_password_isnull,查詢某Id的用戶是否設了密碼。

 1 CREATE PROCEDURE proc_check_password_isnull 2 @userId int 3 AS 4 BEGIN 5 IF(select password FROM [user] 6      WHERE userId = @userId) = null 7      RETURN 0 8 ELSE 9      RETURN 110 END11 GO

執行:

1 DECLARE @status int;2 EXECUTE @status = proc_check_password_isnull @userId = 10000;3 SELECT @status as 'result';

通過上面幾個例子基本上也能明白存儲過程的用法了,下面再給出存儲過程語法的定義:

 1 --SQL Server Stored Procedure Syntax 2 CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] 3  4     [ { @parameter [ type_schema_name. ] data_type } 5         [ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY] 6     ] [ ,...n ] 7  8 [ WITH <procedure_option> [ ,...n ] ] 9 [ FOR REPLICATION ]10 11 AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }12 13 [;]14 15 <procedure_option> ::=16     [ ENCRYPTION ]17     [ RECOMPILE ]18     [ EXECUTE AS Clause ]

其中大部分關鍵字都在上面的四個例子中出現過,也比較好理解,下面再解釋一些沒展示過的關鍵字:

1 [ WITH <procedure_option> [ ,...n ] ]2 <procedure_option> ::=3     [ ENCRYPTION ]4     [ RECOMPILE ]5     [ EXECUTE AS Clause ]

這個是可以為存儲過程定義一些特性,ENCRYPTION是可以為存儲過程加密,RECOMPILE是不緩存,每次調用存儲過程需要重新編譯,EXECUTE AS Clause是否作為語句塊執行。

[ FOR REPLICATION ]

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

ELSE

其實每個數據庫都有很多系統定義的存儲過程,如user表中的存儲過程:

如果有興趣可以去研究下系統的存儲過程,既可以熟練存儲過程的使用,也能對數據庫里面的機制理解的更深。

其實存儲過程中還有很多用法沒有介紹,如通配符、CLR、以及游標。以后如有時間再深入研究。有不對的地方,請大家指正:)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频va| 亚洲精品videossex少妇| 国产精品6699| 九九视频这里只有精品| 久久中文字幕一区| 日本精品久久电影| 久久中文字幕一区| 久久久久久久国产| 7777精品久久久久久| 欧美一级大胆视频| 午夜精品蜜臀一区二区三区免费| 亚洲系列中文字幕| 欧美精品激情在线观看| 日韩av在线资源| 欧美日韩视频免费播放| 中文字幕亚洲一区二区三区五十路| 欧美理论在线观看| 日韩中文字幕在线视频| 国产精品爽爽爽爽爽爽在线观看| 97激碰免费视频| 亚洲成av人乱码色午夜| 91精品国产自产在线观看永久| 综合网日日天干夜夜久久| 插插插亚洲综合网| 亚洲精品一区在线观看香蕉| 成人精品久久久| 97视频色精品| 91成人在线观看国产| 国产不卡精品视男人的天堂| 国产丝袜一区二区三区免费视频| 国内偷自视频区视频综合| 亚洲大胆人体在线| 亚洲三级 欧美三级| 成人午夜高潮视频| 国模视频一区二区| 日韩精品视频中文在线观看| 亚洲国内精品在线| 日韩综合视频在线观看| 中文字幕日韩高清| 2020欧美日韩在线视频| 欧美性xxxxxxx| 日本精品久久久久影院| 欧美日韩国产专区| 日韩一区二区欧美| 国语自产在线不卡| 久久久精品一区二区三区| 精品美女久久久久久免费| 国产欧美最新羞羞视频在线观看| 国产精品视频导航| 欧美成人午夜激情在线| 操人视频在线观看欧美| 日韩av中文在线| 亚洲精品国产精品乱码不99按摩| 亚洲福利视频网| 亚洲精品日产aⅴ| 久久久久久噜噜噜久久久精品| 亚洲欧美一区二区激情| 91国产高清在线| 亚洲激情在线观看| 九九精品在线观看| 亚洲精品少妇网址| 亚洲级视频在线观看免费1级| 成人免费视频xnxx.com| 在线观看国产欧美| 久久精品国产电影| 91精品视频免费观看| 国产精品视频免费在线观看| 欧美一区二粉嫩精品国产一线天| 国产精品激情av在线播放| 国语自产精品视频在免费| 亚洲欧美一区二区三区在线| 亚洲第一区在线观看| 国产成人福利网站| 国产精品av在线| 国产精品视频精品| 久久视频这里只有精品| 日韩av在线资源| 91中文字幕一区| 精品亚洲夜色av98在线观看| 欧美日韩国产精品一区| 最近2019年中文视频免费在线观看| 日韩av在线免费观看一区| 日韩在线播放视频| 日韩欧美在线视频免费观看| 欧美黑人狂野猛交老妇| 亚洲精品日韩av| 久久99亚洲精品| 中文字幕欧美日韩在线| 一区二区三区天堂av| 一区二区三区视频免费在线观看| 最近2019年好看中文字幕视频| 日本精品视频网站| 九九视频直播综合网| 欧美性猛交xxxx乱大交极品| 97久久精品在线| 午夜精品在线观看| 欧美亚洲视频一区二区| 亚洲精品国产精品自产a区红杏吧| 国产精品久久久av久久久| 国产日韩欧美在线看| 久久久av亚洲男天堂| 亚洲精品国产拍免费91在线| 亚洲国产日韩欧美在线99| 国模视频一区二区三区| 亚洲国产成人一区| 欧美尺度大的性做爰视频| 欧美日韩国产黄| 国产精品人成电影| 亚洲成人久久久| 日韩av在线免费播放| 精品小视频在线| 欧美最顶级丰满的aⅴ艳星| 国产欧美日韩专区发布| 欧美激情网站在线观看| 日韩av最新在线| 国产亚洲人成网站在线观看| 亚洲精品美女久久久久| 在线国产精品视频| 亚洲国产成人精品一区二区| 91精品国产自产91精品| 亚洲精品一区二区网址| 亚洲第一二三四五区| 亚洲桃花岛网站| 欧美尺度大的性做爰视频| 国产精品久久久久久久app| 欧美午夜精品伦理| 91亚洲精品一区二区| 91日本在线视频| 日韩精品免费在线视频| 亚洲免费中文字幕| 欧美激情精品久久久久久变态| 久久黄色av网站| 美女视频黄免费的亚洲男人天堂| 国产精品视频精品| 日韩黄色av网站| 红桃av永久久久| 国内精品模特av私拍在线观看| 精品中文字幕在线观看| 丝袜美腿亚洲一区二区| 8050国产精品久久久久久| 7777kkkk成人观看| 精品久久久久久国产91| 一区二区三区回区在观看免费视频| 日韩一区二区在线视频| 久久香蕉国产线看观看网| 国产97色在线|日韩| 91久久在线观看| 日韩欧美成人网| 欧美在线免费看| 精品国产网站地址| 亚洲a成v人在线观看| 97精品国产91久久久久久| 精品香蕉一区二区三区| 91av在线网站| 久久久久久久久久av| 91超碰caoporn97人人| 欧美激情日韩图片| 福利视频导航一区| 成人啪啪免费看| 欧美视频在线免费| 欧美性猛交xxxx免费看久久久| 成人国内精品久久久久一区| 欧美日韩中文字幕在线视频| 一本色道久久综合狠狠躁篇怎么玩|