日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 创建存储过程

發(fā)布時(shí)間:2025/1/21 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 创建存储过程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.創(chuàng)建存儲(chǔ)過程的基本語法模板:

if (exists (select * from sys.objects where name = 'pro_name'))drop proc pro_name go create proc pro_name@param_name param_type [=default_value] as begin sql語句 end

ps:[]表示非必寫內(nèi)容。sys.objects存儲(chǔ)的是本數(shù)據(jù)庫中的信息,不僅僅存儲(chǔ)表名,還有存儲(chǔ)過程名 、視圖名、觸發(fā)器等等。

例如:

1 if (exists (select * from sys.objects where name = 'USP_GetAllUser'))2 drop proc USP_GetAllUser3 go4 create proc USP_GetAllUser5 @UserId int =16 as 7 set nocount on;8 begin9 select * from UserInfo where Id=@UserId 10 end

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

2.調(diào)用方法:

exec dbo.USP_GetAllUser 2;

ps:一般在執(zhí)行存儲(chǔ)過程是,最好加上架構(gòu)名稱,例如 dbo.USP_GetAllUser 這樣可以可以減少不必要的系統(tǒng)開銷,提高性能。 因?yàn)槿绻诖鎯?chǔ)過程名稱前面沒有加上架構(gòu)名稱,SQL SERVER 首先會(huì)從當(dāng)前數(shù)據(jù)庫sys schema(系統(tǒng)架構(gòu))開始查找,如果沒有找到,則會(huì)去其它schema查找,最后在dbo架構(gòu)(系統(tǒng)管理員架構(gòu))里面查找。

3.查看本數(shù)據(jù)庫中存在的存儲(chǔ)過程

依次展開數(shù)據(jù)庫、可編程性、存儲(chǔ)過程,即可看到已創(chuàng)建的存儲(chǔ)過程。

4.修改存儲(chǔ)過程

alter proc proc_name assql語句

5.存儲(chǔ)過程中的輸出參數(shù)的使用

1 if (exists(select * from sys.objects where name='GetUser'))2 drop proc GetUser3 go 4 create proc GetUser5 @id int output,6 @name varchar(20) out7 as 8 begin 9 select @id=Id,@name=Name from UserInfo where Id=@id 10 end 11 s 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:參數(shù)output為該參數(shù)可以輸出

6.分頁獲取數(shù)據(jù)的存儲(chǔ)過程

1 if (exists(select * from sys.objects where name='GetUserByPage'))2 drop proc GetUserByPage3 go 4 create proc GetUserByPage5 @pageIndex int,6 @pageSize int7 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<=@endIndex 18 end 19 20 go 21 exec dbo.GetUserByPage 2,4;

7.存儲(chǔ)過程中事務(wù)的創(chuàng)建

if (exists(select * from sys.objects where name='JayJayToTest'))drop proc JayJayToTest go create proc JayJayToTest@GiveMoney int,@UserName nvarchar(20) as beginset nocount on;begin tran;begin tryupdate 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 ('發(fā)生異常,事務(wù)進(jìn)行回滾');end catch end go exec JayJayToTest 10,'jayjay

8.了解存儲(chǔ)過程的執(zhí)行計(jì)劃

SELECT * FROM sys.[syscacheobjects]查看當(dāng)前緩存的執(zhí)行計(jì)劃

如果執(zhí)行存儲(chǔ)過程時(shí)成功通過解析階段,則 Microsoft SQL Server 查詢優(yōu)化器將分析存儲(chǔ)過程中的 Transact-SQL 語句并創(chuàng)建一個(gè)執(zhí)行計(jì)劃。執(zhí)行計(jì)劃描述執(zhí)行存儲(chǔ)過程的最快方法,所依據(jù)的信息包括:

1.表中的數(shù)據(jù)量。

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

3.WHERE 子句條件所使用的比較運(yùn)算符和比較值。

4.是否存在聯(lián)接以及 UNION、GROUP BY 和 ORDER BY 關(guān)鍵字。

查詢優(yōu)化器在分析完存儲(chǔ)過程中的這些因素后,將執(zhí)行計(jì)劃置于內(nèi)存中。分析存儲(chǔ)過程和創(chuàng)建執(zhí)行計(jì)劃的過程稱為編譯。優(yōu)化的內(nèi)存中的執(zhí)行計(jì)劃將用來執(zhí)行該查詢。執(zhí)行計(jì)劃將駐留在內(nèi)存中,直到重新啟動(dòng) SQL Server 或其他對(duì)象需要存儲(chǔ)空間時(shí)為止。如果隨后執(zhí)行了存儲(chǔ)過程,而現(xiàn)有執(zhí)行計(jì)劃仍留在內(nèi)存中,則 SQL Server 將重用現(xiàn)有執(zhí)行計(jì)劃。如果執(zhí)行計(jì)劃不再位于內(nèi)存中,則創(chuàng)建新的執(zhí)行計(jì)劃。

重新編譯執(zhí)行計(jì)劃(create proc JayJayToTest with recompile)

創(chuàng)建存儲(chǔ)過程時(shí)在其定義中指定 WITH RECOMPILE 選項(xiàng),表明 SQL Server 將不對(duì)該存儲(chǔ)過程計(jì)劃進(jìn)行高速緩存;該存儲(chǔ)過程將在每次執(zhí)行時(shí)都重新編譯。當(dāng)存儲(chǔ)過程的參數(shù)值在各次執(zhí)行間都有較大差異,導(dǎo)致每次均需創(chuàng)建不同的執(zhí)行計(jì)劃時(shí),可使用 WITH RECOMPILE 選項(xiàng)。此選項(xiàng)并不常用,因?yàn)槊看螆?zhí)行存儲(chǔ)過程時(shí)都必須對(duì)其進(jìn)行重新編譯,這樣會(huì)使存儲(chǔ)過程的執(zhí)行變慢。

由于數(shù)據(jù)庫的新狀態(tài),數(shù)據(jù)庫內(nèi)的某些更改可能會(huì)導(dǎo)致執(zhí)行計(jì)劃效率低下或不再有效。SQL Server 檢測(cè)這些使執(zhí)行計(jì)劃無效的更改,并將計(jì)劃標(biāo)記為無效。此后,必須為執(zhí)行查詢的下一個(gè)連接重新編譯新的計(jì)劃。導(dǎo)致計(jì)劃無效的情況包括:

1.對(duì)查詢所引用的表或視圖進(jìn)行任何結(jié)構(gòu)更改(ALTER TABLE 和 ALTER VIEW)。
  2.通過語句(如 UPDATE STATISTICS)顯式生成或者自動(dòng)生成新的分發(fā)內(nèi)容統(tǒng)計(jì)。
  3.除去執(zhí)行計(jì)劃所使用的索引。
  4.顯式調(diào)用 sp_recompile。
  5.對(duì)鍵的大量更改(其他用戶對(duì)由查詢引用的表使用 INSERT 或 DELETE 語句所產(chǎn)生的修改)。
  6.對(duì)于帶觸發(fā)器的表,inserted 或 deleted 表內(nèi)的行數(shù)顯著增長。

總結(jié)

以上是生活随笔為你收集整理的SQL Server 创建存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本久色 | 日韩精品视频网 | 成人精品免费 | 91伊人久久 | 超碰免费97 | 亚洲综合性 | 国产乱来视频 | 亚洲色图av在线 | 久草国产在线观看 | 久久久天天 | 久艹视频在线观看 | 国产精品免费视频观看 | √天堂8资源中文在线 | 日韩一级淫片 | 久久精品欧美日韩 | 亚洲丁香| 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲春色在线 | 亚洲国产麻豆 | 狠狠爱夜夜 | 日韩精品一线二线三线 | youjizz日韩| 日本孰妇毛茸茸xxxx | 欧美巨乳在线观看 | 成人免费不卡视频 | 亚洲一区二区不卡在线观看 | av大全网站 | 强睡邻居人妻中文字幕 | 久在线观看视频 | 日本特级毛片 | 黄色一级视频 | 黄色的网站在线观看 | 深喉口爆一区二区三区 | 亚洲av永久纯肉无码精品动漫 | 国产在线精品视频 | 亚洲日本国产 | 日韩国产小视频 | 国产特级淫片免费看 | 国产一线二线在线观看 | 香港三日本8a三级少妇三级99 | 黄色工厂这里只有精品 | 中文字幕一区二区三区免费视频 | 爽爽影院在线免费观看 | 91久久精品一区二区三 | 亚洲av中文无码乱人伦在线视色 | 日日摸天天爽天天爽视频 | 谁有毛片网站 | 国产成人+综合亚洲+天堂 | a∨鲁丝一区鲁丝二区鲁丝三区 | 亚洲爱色 | 欧美一级片黄色 | 美日韩av | 国产成人手机视频 | 日韩精品h | 亚洲二区中文字幕 | 国产日韩欧美在线播放 | 欧美91精品久久久久国产性生爱 | 97视频播放| 99re色| 香蕉视频黄色片 | 亚洲免费av一区二区 | 国产高清成人久久 | 久久91精品国产91久久小草 | 久艹视频在线 | 成人在线免费观看网站 | 色综合一区二区 | 爽爽视频在线观看 | 国产a v一区二区三区 | 亚洲精品国产精品国自产观看浪潮 | 免费网站在线观看人数在哪动漫 | 做爰无遮挡三级 | 亚洲精品一卡二卡 | 亚洲乱码视频在线观看 | 欧美日韩国产精品一区二区 | 中文在线一区 | 99精品久久久久 | 爱情岛论坛成人av | 黄色美女片 | 久久亚洲无码视频 | 18成人免费观看视频 | 国产高清在线视频 | 看久久 | 狠狠操综合 | 精品国产免费看 | 成人毛片大全 | 亚洲综合激情在线 | 少妇高潮淫片免费观看 | 久久国产精品久久国产精品 | 久久99久久99精品蜜柚传媒 | 久草操| 久久久久久欧美精品se一二三四 | 成人福利视频导航 | 天天干天天碰 | www.桃色av嫩草.com | 啪啪在线视频 | 亚洲国产一区二区三区四区 | 国产一区二区三区色淫影院 | 国产欧美专区 | 91久久久久久久久久久久 |