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

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

SQL Server 存儲過程

2024-08-31 00:54:50
字體:
來源:轉載
供稿:網友
SQL Server 存儲過程SQL Server 存儲過程

Transact-SQL中的存儲過程,非常類似于java語言中的方法,它可以重復調用。當存儲過程執行一次后,可以將語句緩存中,這樣下次執行的時候直接使用緩存中的語句。這樣就可以提高存儲過程的性能。

Ø 存儲過程的概念

存儲過程PRocedure是一組為了完成特定功能的SQL語句集合,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名稱并給出參數來執行。

存儲過程中可以包含邏輯控制語句和數據操縱語句,它可以接受參數、輸出參數、返回單個或多個結果集以及返回值。

由于存儲過程在創建時即在數據庫服務器上進行了編譯并存儲在數據庫中,所以存儲過程運行要比單個的SQL語句塊要快。同時由于在調用時只需用提供存儲過程名和必要的參數信息,所以在一定程度上也可以減少網絡流量、簡單網絡負擔。

1、 存儲過程的優點

A、 存儲過程允許標準組件式編程

存儲過程創建后可以在程序中被多次調用執行,而不必重新編寫該存儲過程的SQL語句。而且數據庫專業人員可以隨時對存儲過程進行修改,但對應用程序源代碼卻毫無影響,從而極大的提高了程序的可移植性。

B、 存儲過程能夠實現較快的執行速度

如果某一操作包含大量的T-SQL語句代碼,分別被多次執行,那么存儲過程要比批處理的執行速度快得多。因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,并給出最終被存在系統表中的存儲計劃。而批處理的T-SQL語句每次運行都需要預編譯和優化,所以速度就要慢一些。

C、 存儲過程減輕網絡流量

對于同一個針對數據庫對象的操作,如果這一操作所涉及到的T-SQL語句被組織成一存儲過程,那么當在客戶機上調用該存儲過程時,網絡中傳遞的只是該調用語句,否則將會是多條SQL語句。從而減輕了網絡流量,降低了網絡負載。

D、 存儲過程可被作為一種安全機制來充分利用

系統管理員可以對執行的某一個存儲過程進行權限限制,從而能夠實現對某些數據訪問的限制,避免非授權用戶對數據的訪問,保證數據的安全。

Ø 系統存儲過程

系統存儲過程是系統創建的存儲過程,目的在于能夠方便的從系統表中查詢信息或完成與更新數據庫表相關的管理任務或其他的系統管理任務。系統存儲過程主要存儲在master數據庫中,以“sp”下劃線開頭的存儲過程。盡管這些系統存儲過程在master數據庫中,但我們在其他數據庫還是可以調用系統存儲過程。有一些系統存儲過程會在創建新的數據庫的時候被自動創建在當前數據庫中。

常用系統存儲過程有:

exec sp_databases; --查看數據庫exec sp_tables;        --查看表exec sp_columns student;--查看列exec sp_helpIndex student;--查看索引exec sp_helpConstraint student;--約束exec sp_stored_procedures;exec sp_helptext 'sp_stored_procedures';--查看存儲過程創建、定義語句exec sp_rename student, stuInfo;--修改表、索引、列的名稱exec sp_renamedb myTempDB, myDB;--更改數據庫名稱exec sp_defaultdb 'master', 'myDB';--更改登錄名的默認數據庫exec sp_helpdb;--數據庫幫助,查詢數據庫信息exec sp_helpdb master;
系統存儲過程示例:
--表重命名exec sp_rename 'stu', 'stud';select * from stud;--列重命名exec sp_rename 'stud.name', 'sName', 'column';exec sp_help 'stud';--重命名索引exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';exec sp_help 'student';--查詢所有存儲過程select * from sys.objects where type = 'P';select * from sys.objects where type_desc like '%pro%' and name like 'sp%';

Ø 用戶自定義存儲過程

1、 創建語法

create proc | procedure pro_name    [{@參數數據類型} [=默認值] [output],     {@參數數據類型} [=默認值] [output],     ....    ]as    SQL_statements

2、 創建不帶參數存儲過程

--創建存儲過程if (exists (select * from sys.objects where name = 'proc_get_student'))    drop proc proc_get_studentgocreate proc proc_get_studentas    select * from student;--調用、執行存儲過程exec proc_get_student;

3、 修改存儲過程

--修改存儲過程alter proc proc_get_studentasselect * from student;

4、 帶參存儲過程

--帶參存儲過程if (object_id('proc_find_stu', 'P') is not null)    drop proc proc_find_stugocreate proc proc_find_stu(@startId int, @endId int)as    select * from student where id between @startId and @endIdgoexec proc_find_stu 2, 4;

5、 帶通配符參數存儲過程

--帶通配符參數存儲過程if (object_id('proc_findStudentByName', 'P') is not null)    drop proc proc_findStudentByNamegocreate proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')as    select * from student where name like @name and name like @nextName;goexec proc_findStudentByName;exec proc_findStudentByName '%o%', 't%';

6、 帶輸出參數存儲過程

if (object_id('proc_getStudentRecord', 'P') is not null)    drop proc proc_getStudentRecordgocreate proc proc_getStudentRecord(    @id int, --默認輸入參數    @name varchar(20) out, --輸出參數    @age varchar(20) output--輸入輸出參數)as    select @name = name, @age = age  from student where id = @id and sex = @age;go-- declare @id int,        @name varchar(20),        @temp varchar(20);set @id = 7; set @temp = 1;exec proc_getStudentRecord @id, @name out, @temp output;select @name, @temp;print @name + '#' + @temp;

7、 不緩存存儲過程

--WITH RECOMPILE 不緩存if (object_id('proc_temp', 'P') is not null)    drop proc proc_tempgocreate proc proc_tempwith recompileas    select * from student;goexec proc_temp;

8、 加密存儲過程

--加密WITH ENCRYPTION if (object_id('proc_temp_encryption', 'P') is not null)    drop proc proc_temp_encryptiongocreate proc proc_temp_encryptionwith encryptionas    select * from student;goexec proc_temp_encryption;exec sp_helptext 'proc_temp';exec sp_helptext 'proc_temp_encryption';

9、 帶游標參數存儲過程

if (object_id('proc_cursor', 'P') is not null)    drop proc proc_cursorgocreate proc proc_cursor    @cur cursor varying outputas    set @cur = cursor forward_only static for    select id, name, age from student;    open @cur;go--調用declare @exec_cur cursor;declare @id int,        @name varchar(20),        @age int;exec proc_cursor @cur = @exec_cur output;--調用存儲過程fetch next from @exec_cur into @id, @name, @age;while (@@fetch_status = 0)begin    fetch next from @exec_cur into @id, @name, @age;    print 'id: ' + convert(varchar, @id) + ', name: ' + @name + ', age: ' + convert(char, @age);endclose @exec_cur;deallocate @exec_cur;--刪除游標

10、 分頁存儲過程

---存儲過程、row_number完成分頁if (object_id('pro_page', 'P') is not null)    drop proc proc_cursorgocreate proc pro_page    @startIndex int,    @endIndex intas    select count(*) from product;        select * from (        select row_number() over(order by pid) as rowId, * from product     ) temp    where temp.rowId between @startIndex and @endIndexgo--drop proc pro_pageexec pro_page 1, 4----分頁存儲過程if (object_id('pro_page', 'P') is not null)    drop proc pro_stugocreate procedure pro_stu(    @pageIndex int,    @pageSize int)as    declare @startRow int, @endRow int    set @startRow = (@pageIndex - 1) * @pageSize +1    set @endRow = @startRow + @pageSize -1    select * from (        select *, row_number() over (order by id asc) as number from student     ) t    where t.number between @startRow and @endRow;exec pro_stu 2, 2;

Ø Raiserror

Raiserror返回用戶定義的錯誤信息,可以指定嚴重級別,設置系統變量記錄所發生的錯誤。

語法如下:

Raiserror({msg_id | msg_str | @local_variable}  {, severity, state}  [,argument[,…n]]  [with option[,…n]])

# msg_id:在sysmessages系統表中指定的用戶定義錯誤信息

# msg_str:用戶定義的信息,信息最大長度在2047個字符。

# severity:用戶定義與該消息關聯的嚴重級別。當使用msg_id引發使用sp_addmessage創建的用戶定義消息時,raiserror上指定嚴重性將覆蓋sp_addmessage中定義的嚴重性。

任何用戶可以指定0-18直接的嚴重級別。只有sysadmin固定服務器角色常用或具有alter trace權限的用戶才能指定19-25直接的嚴重級別。19-25之間的安全級別需要使用with log選項。

# state:介于1至127直接的任何整數。State默認值是1。

raiserror('is error', 16, 1);select * from sys.messages;--使用sysmessages中定義的消息raiserror(33003, 16, 1);raiserror(33006, 16, 1);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色一区二区三区| 日韩黄色在线免费观看| 精品调教chinesegay| 亚洲成人教育av| 成人久久18免费网站图片| 久久视频免费在线播放| 亚洲人高潮女人毛茸茸| 国产精品手机播放| 国产亚洲精品综合一区91| 欧美亚洲另类激情另类| 国产一区二区三区欧美| 欧美性69xxxx肥| 国产精品午夜国产小视频| 国产精品丝袜一区二区三区| 久久成人一区二区| 91chinesevideo永久地址| 欧美在线免费观看| 亚洲精品视频久久| 日韩av综合中文字幕| 亚洲伊人一本大道中文字幕| 国产精品草莓在线免费观看| 91色视频在线观看| 51午夜精品视频| 日韩av有码在线| 亚洲影院色在线观看免费| 91国内免费在线视频| 国产成人avxxxxx在线看| 亚洲国产日韩欧美综合久久| 欧美一乱一性一交一视频| 亚洲欧美日韩精品| 亚洲国产精久久久久久久| 欧美极度另类性三渗透| 欧美国产极速在线| 欧美精品在线播放| 欧美成人亚洲成人日韩成人| 亚洲成av人影院在线观看| 在线看福利67194| 日韩美女在线播放| 亚洲午夜av电影| 久久精品人人做人人爽| 精品久久久久久亚洲国产300| 2021久久精品国产99国产精品| 91精品国产91久久久久福利| 国产精品99久久久久久人| 亚洲欧美日韩中文视频| 久久频这里精品99香蕉| 97国产精品免费视频| 97碰在线观看| 久久精品最新地址| 亚洲国产精品久久久久秋霞不卡| 精品毛片三在线观看| 欧美精品videosex极品1| 日韩欧美一区二区三区久久| 91美女福利视频高清| 91精品国产自产在线老师啪| 色狠狠久久aa北条麻妃| 亚洲欧美精品伊人久久| 欧美日韩中国免费专区在线看| 国产精品视频永久免费播放| 成人精品在线观看| 色狠狠久久aa北条麻妃| 欲色天天网综合久久| 亚洲日本中文字幕| 欧美高跟鞋交xxxxxhd| 不卡av在线网站| 国产一区玩具在线观看| 国产一区二区三区网站| 国产精品对白刺激| 亚洲精品久久久久中文字幕欢迎你| 亚洲男人天堂2023| 中文字幕少妇一区二区三区| 久久精品中文字幕一区| www.久久撸.com| www.日本久久久久com.| 亲爱的老师9免费观看全集电视剧| 久久综合国产精品台湾中文娱乐网| 亚洲自拍欧美色图| 国产精品第3页| 欧美有码在线视频| 亚洲第一天堂无码专区| 九九热这里只有在线精品视| 亚洲精品大尺度| www.日本久久久久com.| 中文字幕亚洲激情| 国产美女直播视频一区| 奇米成人av国产一区二区三区| 亚洲免费av片| 亚洲女人天堂色在线7777| 亚洲国产精品大全| 亚洲mm色国产网站| 亚洲爱爱爱爱爱| 亚洲欧美日韩爽爽影院| 国产欧美 在线欧美| 91系列在线观看| 亚洲免费影视第一页| 久久久人成影片一区二区三区| 精品国产老师黑色丝袜高跟鞋| 免费av一区二区| 国产精品久久久久久久久久99| 国产精品自在线| 日本一区二区在线免费播放| 欧美与欧洲交xxxx免费观看| 亚洲精品一区在线观看香蕉| 国产福利视频一区| 国产精品专区h在线观看| 成人伊人精品色xxxx视频| 精品magnet| 国产精品久久久久aaaa九色| 亚洲人在线视频| 亚洲欧洲国产一区| 欧美日韩性生活视频| 亚洲а∨天堂久久精品9966| 亚洲一区二区三区乱码aⅴ| 中文字幕日韩视频| 中文字幕免费国产精品| 亚洲mm色国产网站| 亚洲精品视频免费在线观看| 日本免费久久高清视频| 国产精品视频专区| 欧美激情第三页| 亚洲乱码国产乱码精品精天堂| 中文字幕v亚洲ⅴv天堂| 国产精品第一区| 亚洲精品综合精品自拍| 亚洲肉体裸体xxxx137| 91精品在线观看视频| 国产精品嫩草影院久久久| 97香蕉久久超级碰碰高清版| 国产伦精品一区二区三区精品视频| 日韩中文字幕av| …久久精品99久久香蕉国产| 91精品国产91久久久久久不卡| 欧美猛交ⅹxxx乱大交视频| 中文字幕无线精品亚洲乱码一区| 国产精品日韩欧美大师| 91豆花精品一区| 国产日韩欧美在线播放| 久久香蕉频线观| 日韩欧美国产骚| 日本91av在线播放| 97婷婷涩涩精品一区| 国产成人精品免高潮费视频| 欧美日本啪啪无遮挡网站| 国产欧美亚洲精品| 狠狠操狠狠色综合网| 日韩精品在线视频美女| 日本精品久久中文字幕佐佐木| 久久99精品久久久久久噜噜| 91久久国产综合久久91精品网站| 国产91精品久久久久| 日韩av观看网址| 456国产精品| 色综合91久久精品中文字幕| 91国偷自产一区二区三区的观看方式| 中文字幕av一区中文字幕天堂| 日韩电影中文字幕av| 日韩免费看的电影电视剧大全| 中文字幕精品久久久久| 久久久中精品2020中文| 精品国产乱码久久久久酒店| 亚洲第一色中文字幕| 亚洲精品久久久久| y97精品国产97久久久久久| 另类天堂视频在线观看|