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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

sql server 2008学习10 存储过程

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql server 2008学习10 存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸入輸出參數:

給存儲過程傳參數,叫做輸入參數,用戶告訴存儲過程需要 利用這個參數干些什么.

輸出參數: 從存儲過程得到那些數據.

?

創建一個可選參數的存儲過程:

?

create proc pa1
@name varchar(50)=NULL
as
if(@name is not null)select * from a where name like @name+'%';
elseselect * from a

exec pa1?

exec pa1 a

?

創建輸出參數:

使用輸出參數 傳遞 最后一次插入的標識列的值:

?

create proc pa2@id int output
    asinsert into a(name) values('5')
    set @id=@@identity

執行這個存儲過程:

declare @id int
exec pa2 @id out
print @id

結果如下:

?

返回值:

創建有返回值的存儲過程:
create proc pa5
as
declare @mess varchar(50)
set @mess='exit'
print @mess;
return;

執行:

declare @result varchar(50)
exec @result=pa5
select @result

結果:

?

?

錯誤處理:

可以使用 @@error

?

use test
goif exists(select *  from sysobjects where name='pa6')
drop proc pa6
go
create proc pa6
@name nvarchar(50),
@ss int
as
declare @error int
insert into b values(@name,@ss);set @error=@@errorif @error=0print 'new record is inserted' ;elsebeginif @error=547print 'at least one provided parameter was not found,correct an retry';elseprint ' unknown error occurred'end

下面使用try/catch

什么是 內聯錯誤: 那些能讓sql server 繼續運行,但是因為某種原因而不能 成功完成指定任務的錯誤.

?

手動引發錯誤:

raiserror(message_ID,級別,state)

可以查看 sql server 提供的所有錯誤消息: select * from master.sys.messages

?

存儲過程的優點:

  1. 可復用
  2. 安全性.可以創建一個返回結果集的存儲過程而不用賦予用戶訪問底層數據表的權限.???

存儲過程和性能

下面看一下存儲過程是如何工作的:

首先運行 create proc過程,這回解析查詢 以確保會實際運行這些代碼.它與 直接運行腳本的區別在于:

create proc可以利用所謂的 延遲對象解析. 可以忽略一些對象還不存在的實施,這就可以稍后創建這些對象.

在創建存儲過程之后,它將等待第一次執行.在那時,存儲過程唄優化,而查詢計劃被 編譯并且 緩存到系統上.

后續幾次運行此過程時,除非使用 with recompile選項指定,否則都會使用緩存的查詢計劃. 意味著每次使用存儲過程

時,存儲過程都會跳過很多優化和編譯工作.

如果想 在每次執行存儲過程時都自動重新編譯,那么可以這樣做:

create proc pa1
with recompile   --這句可以實現
 as 
select * from a

?

遞歸:

計算階乘

create proc aa
@vin int,
@vout int out
as
declare @inv int
declare @outv intif @vin !=1beginselect @inv=@vin-1;exec aa @inv,@outv out;select @vout=@vin*@outv;endelsebeginselect @vout=1;end return ;go

?

執行此過程:

declare @inv int;declare @outv int;set @inv=5;exec aa @inv,@outv out;print cast(@outv as varchar(30))

結果:

轉載于:https://www.cnblogs.com/soundcode/archive/2012/09/11/2680002.html

總結

以上是生活随笔為你收集整理的sql server 2008学习10 存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。