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

首頁 > 開發 > 綜合 > 正文

SqlServer存儲過程詳解

2024-07-21 02:47:26
字體:
來源:轉載
供稿:網友
SqlServer存儲過程詳解SqlServer存儲過程詳解

1.創建存儲過程的基本語法模板:

if (exists (select * from sys.objects where name = 'PRo_name'))    drop proc pro_namegocreate proc pro_name    @param_name param_type [=default_value]asbegin        sql語句end

ps:[]表示非必寫內容。sys.objects存儲的是本數據庫中的信息,不僅僅存儲表名,還有存儲過程名、視圖名、觸發器等等。

例如:

 1 if (exists (select * from sys.objects where name = 'USP_GetAllUser')) 2     drop proc USP_GetAllUser 3 go 4 create proc USP_GetAllUser 5 @UserId int =1 6 as  7 set nocount on; 8 begin 9     select * from UserInfo where Id=@UserId10 end

ps:SQL Server 實用工具將 GO 解釋為應將當前的 Transact-SQL 批處理語句發送給 SQL Server 的信號。當前批處理語句是自上一 GO 命令后輸入的所有語句,若是第一條 GO 命令,則是從特殊會話或腳本的開始處到這條 GO 命令之間的所有語句。

2.調用方法:

exec dbo.USP_GetAllUser 2;

ps:一般在執行存儲過程是,最好加上架構名稱,例如 dbo.USP_GetAllUser 這樣可以可以減少不必要的系統開銷,提高性能。 因為如果在存儲過程名稱前面沒有加上架構名稱,SQL SERVER 首先會從當前數據庫sys schema(系統架構)開始查找,如果沒有找到,則會去其它schema查找,最后在dbo架構(系統管理員架構)里面查找。

3.查看本數據庫中存在的存儲過程

依次展開數據庫、可編程性、存儲過程,即可看到已創建的存儲過程。

4.修改存儲過程

alter proc proc_nameas  sql語句

5.存儲過程中的輸出參數的使用

 1 if (exists(select * from  sys.objects where name='GetUser')) 2     drop proc GetUser 3 go  4 create proc GetUser 5     @id int output, 6     @name varchar(20) out 7 as  8 begin  9     select @id=Id,@name=Name from UserInfo where Id=@id10 end11 12 go 13 declare 14 @name varchar(20),15 @id int;16 set @id=3;17 exec dbo.GetUser @id,@name out;18 select @id,@name;19 print Cast(@id as varchar(10))+'-'+@name;

ps:參數output為該參數可以輸出

6.分頁獲取數據的存儲過程

 1 if (exists(select * from  sys.objects where name='GetUserByPage')) 2     drop proc GetUserByPage 3 go  4 create proc GetUserByPage 5     @pageIndex int, 6     @pageSize int 7 as  8 declare  9 @startIndex int,10 @endIndex int;11 set @startIndex =  (@pageIndex-1)*@pageSize+1;12 set @endIndex = @startIndex + @pageSize -1 ;13 begin 14     select Id,Name from 15     (16         select *,row_number()over (order by Id)as number from UserInfo  17     )t where t.number>=@startIndex and t.number<=@endIndex18 end19 20 go 21 exec dbo.GetUserByPage 2,4;

7.存儲過程中事務的創建

if (exists(select * from  sys.objects where name='JayJayToTest'))    drop proc JayJayToTestgo create proc JayJayToTest    @GiveMoney int,    @UserName nvarchar(20)as beginset nocount on;    begin tran;    begin try        update BankTest set Money = Money-@GiveMoney where Name=@UserName;        update BankTest set Money = Money+@GiveMoney where Name='test';        commit;    end try        begin catch                rollback tran;        print ('發生異常,事務進行回滾');    end catch    endgoexec JayJayToTest 10,'jayjay'

8.了解存儲過程的執行計劃

SELECT * FROM sys.[syscacheobjects]查看當前緩存的執行計劃

如果執行存儲過程時成功通過解析階段,則 Microsoft SQL Server 查詢優化器將分析存儲過程中的 Transact-SQL 語句并創建一個執行計劃。執行計劃描述執行存儲過程的最快方法,所依據的信息包括:

  1.表中的數據量。

  2.表的索引的存在及特征,以及數據在索引列中的分布。

  3.WHERE 子句條件所使用的比較運算符和比較值。

  4.是否存在聯接以及 UNION、GROUP BY 和 ORDER BY 關鍵字。

查詢優化器在分析完存儲過程中的這些因素后,將執行計劃置于內存中。分析存儲過程和創建執行計劃的過程稱為編譯。優化的內存中的執行計劃將用來執行該查詢。執行計劃將駐留在內存中,直到重新啟動 SQL Server 或其他對象需要存儲空間時為止。如果隨后執行了存儲過程,而現有執行計劃仍留在內存中,則 SQL Server 將重用現有執行計劃。如果執行計劃不再位于內存中,則創建新的執行計劃。

重新編譯執行計劃(create proc JayJayToTest with recompile)

創建存儲過程時在其定義中指定WITHRECOMPILE選項,表明SQLServer將不對該存儲過程計劃進行高速緩存;該存儲過程將在每次執行時都重新編譯。當存儲過程的參數值在各次執行間都有較大差異,導致每次均需創建不同的執行計劃時,可使用WITHRECOMPILE選項。此選項并不常用,因為每次執行存儲過程時都必須對其進行重新編譯,這樣會使存儲過程的執行變慢。

由于數據庫的新狀態,數據庫內的某些更改可能會導致執行計劃效率低下或不再有效。SQL Server 檢測這些使執行計劃無效的更改,并將計劃標記為無效。此后,必須為執行查詢的下一個連接重新編譯新的計劃。導致計劃無效的情況包括:

  1.對查詢所引用的表或視圖進行任何結構更改(ALTER TABLE 和 ALTER VIEW)。  2.通過語句(如 UPDATE STATISTICS)顯式生成或者自動生成新的分發內容統計?! ?.除去執行計劃所使用的索引?! ?.顯式調用 sp_recompile?! ?.對鍵的大量更改(其他用戶對由查詢引用的表使用 INSERT 或 DELETE 語句所產生的修改)?! ?.對于帶觸發器的表,inserted 或 deleted 表內的行數顯著增長。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美天天综合色影久久精品| 97超级碰在线看视频免费在线看| 精品久久久久久久久久久久久久| 日韩成人激情影院| 狠狠色狠狠色综合日日五| 日韩综合视频在线观看| 日本久久久久亚洲中字幕| 国产性猛交xxxx免费看久久| 成人h视频在线观看播放| 菠萝蜜影院一区二区免费| 国产精品欧美激情| 自拍偷拍亚洲欧美| 另类天堂视频在线观看| 久久久这里只有精品视频| 国产精品嫩草视频| 午夜精品一区二区三区在线播放| 亚洲欧美成人精品| 国产成人午夜视频网址| 亚洲欧洲视频在线| 日本久久久久久久久| 狠狠色狠狠色综合日日小说| 国模叶桐国产精品一区| 国产精品美女视频网站| 日韩av中文字幕在线播放| 亚洲天堂av在线免费观看| 一本色道久久综合狠狠躁篇怎么玩| 91国偷自产一区二区三区的观看方式| 日本亚洲欧洲色α| 久久999免费视频| 成人国产精品免费视频| 亚洲欧美中文日韩在线| 久久视频中文字幕| 精品国产成人av| 国产免费久久av| 久久国产精品偷| 欧美黄色片在线观看| 久99九色视频在线观看| 91精品久久久久久久久久久| 日韩在线观看免费高清完整版| 欧美成人国产va精品日本一级| 精品久久久免费| 在线精品视频视频中文字幕| 亚洲性视频网站| 欧美日韩加勒比精品一区| 色综合影院在线| 欧美亚洲激情视频| 亚洲精品福利在线观看| 丰满岳妇乱一区二区三区| 国产欧美欧洲在线观看| 欧美有码在线观看视频| 国产最新精品视频| 91亚洲精品视频| 性欧美在线看片a免费观看| 日韩欧美国产黄色| 亚洲人成绝费网站色www| 国产在线观看不卡| 成人黄色在线免费| 亚洲xxx视频| 国内精品模特av私拍在线观看| 97高清免费视频| 国产成人+综合亚洲+天堂| 日韩av在线直播| 最近2019中文字幕大全第二页| 成人福利视频网| 欧美激情综合亚洲一二区| 热99精品里视频精品| 国产精品久久久久999| 78m国产成人精品视频| 欧美成人四级hd版| 欧美日本中文字幕| 国产亚洲成av人片在线观看桃| 久久久久久久久久久人体| 中文字幕日韩av综合精品| 韩国福利视频一区| 亚洲欧美综合v| 97香蕉超级碰碰久久免费软件| 4438全国亚洲精品在线观看视频| 国产欧美日韩免费看aⅴ视频| 成人中文字幕+乱码+中文字幕| 国产亚洲人成a一在线v站| 久久91精品国产91久久跳| 欧美中文字幕在线视频| 中文字幕视频在线免费欧美日韩综合在线看| 国产成人精品av在线| 日日摸夜夜添一区| 黄色91在线观看| 91色p视频在线| 欧美激情喷水视频| 久久天堂av综合合色| 亚洲黄色在线观看| 在线中文字幕日韩| 日韩中文字幕在线观看| 国产精品2018| 69影院欧美专区视频| 亚洲自拍欧美色图| 一区二区三区天堂av| 欧美有码在线观看| 亚洲自拍偷拍视频| 91久久在线视频| 91免费版网站入口| 91精品久久久久久久久久久久久| 欧美在线视频一区二区| 欧美激情视频网站| 中文字幕久热精品视频在线| 68精品久久久久久欧美| 日韩精品在线观看一区二区| 日韩**中文字幕毛片| 韩日精品中文字幕| 国产一区二区三区在线观看网站| 亚洲图片欧美午夜| 精品无人国产偷自产在线| 狠狠躁夜夜躁人人爽超碰91| 国产日韩在线看片| 亚洲人成电影在线| 国产成人久久久精品一区| 亚洲专区在线视频| 欧美亚洲另类在线| 精品国产区一区二区三区在线观看| 免费不卡在线观看av| 亚洲福利视频二区| 久久成人人人人精品欧| 欧美激情中文字幕在线| 高清亚洲成在人网站天堂| 国产精彩精品视频| 日韩av在线电影网| 欧美一区二区三区免费视| 精品伊人久久97| 欧美午夜精品伦理| 国产亚洲精品一区二555| 国产精品久久久久久久久久小说| 亚洲精品一区二区网址| 欧美天天综合色影久久精品| 欧美日韩国产丝袜美女| 欧美精品在线第一页| 亚洲一区二区三区视频播放| 91麻豆国产语对白在线观看| 96国产粉嫩美女| 91在线|亚洲| 亚洲性生活视频| 国产亚洲精品成人av久久ww| 欧美日韩不卡合集视频| 亚洲男人天堂网站| 国产综合视频在线观看| 在线看福利67194| 国外成人在线视频| 国产精品视频1区| 亚洲黄色成人网| 国模精品视频一区二区三区| 欧美激情免费在线| 国产69精品99久久久久久宅男| 亚洲高清免费观看高清完整版| 中文字幕精品在线| 91久久国产综合久久91精品网站| 久久综合国产精品台湾中文娱乐网| 97av视频在线| 亚洲国产成人久久| 久久久国产精品视频| 久久在线免费观看视频| 中文字幕日韩电影| 国产精品女主播视频| 茄子视频成人在线| 欧美性jizz18性欧美| 欧美性xxxx极品hd满灌| 欧美日韩裸体免费视频|