<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
從儲存過程返回資料 - SQL Server | Microsoft 官方檔案
儲存過程它是真正的指令碼,更準確地說,它是批次處理(batch),但都不是很確切,它儲存與資料庫而不是單獨的檔案中。
儲存過程中有輸入引數,輸出引數以及返回值等。
建立儲存過程的方法除了他使用AS關鍵字外,和建立資料庫中任何其他物件一樣。儲存過程的基本語法如下:
在語法中,PROC是PROCEDURE的縮寫,兩個選項的意思一樣。在對儲存過程命名完之後,接著是參數列。引數是可選的。關鍵字AS其後就是實際的程式碼。
CREATE PROCEDURE|PROC <sproc name> [ [schema.] <data type> [VARYING] [=] [OUT[PUT]] [READONLY] [, [schema.] <data type> [VARYING] [=] [OUT[PUT]] [READONLY] [,... ... ]] [WITH RECOMPILE | ENCRYPTION | [EXECUTE AS { CALLER | SELF | OWNER | <'user name'>}] AS <code> | EXTERNAL NAME <assembly name>.<assembly class>.<method>
簡單的儲存過程範例:
CREATE PROC spPerson AS SELECT * FROM Person
執行儲存過程:
EXEC spPerson
宣告引數需要以下幾部分的資訊:名稱、資料型別 、預設值 、方向、
對於名稱,有一組簡單的規則。
其語法如下所示:
@parameter_name [AS] datatype [=default|NULL] [VARYING] [OUTPUT | OUT]
一個需要傳入引數的儲存過程範例:
CREATE PROC spName @Name nvarchar(50) AS SELECT Name FROM Person WHERE Name LIKE @Name + '%';
執行儲存過程:
EXEC spName '酒';
在預設值方面,引數與變數不同。對於同樣的情況,變數一般初始化為NULL值,而引數不是。事實上,如果不提供預設值,則會假設引數是必須的,並且當呼叫儲存過程時需要提供一個初始值。
為了使引數是可選的,必須提供預設值。方法是在資料型別後在逗號之前新增"="符號和作為預設值的值。這樣,儲存過程的使用者可以有決定對此引數不提供值或是提供他們自己的值。
建立一個儲存過程如下:
CREATE PROC spName @Name nvarchar(50) = NULL AS IF @Name IS NOT NULL SELECT * FROM Person WHERE NAME = @Name ELSE SELECT * FROM Person WHERE Id = 45
執行如下語句:
EXEC spName EXEC spName '如意刀狼'
輸出結果如下:
一個獲得OUTPUT引數的儲存過程:
CREATE PROC InsertPerson @Id int OUTPUT --必須註明為OUTPUT AS INSERT INTO Person VALUES('劉備',22,190,'不詳','未婚','幼兒園','不詳',4999999) SET @Id = @@IDENTITY
執行儲存過程:
DECLARE @Id int --實際上,呼叫時名稱可以不同,例如也可以為@Num,@i等等。 EXEC InsertPerson @Id OUTPUT --注意此處也要有OUTPUT SELECT @Id
返回值可用來確定儲存過程執行的狀態。
SQL Server預設會在完成儲存過程時自動返回一個0值。
為了從儲存過程向呼叫程式碼傳遞返回值,只需要使用RETURN語句。
RETURN []
要特別注意的是:返回值必須是整數。
關於RETURN語句,最重要的是知道它是無條件地從儲存過程中退出的。無論執行到儲存過程的哪個位置,在呼叫RETURN語句之後將不會執行任何一行程式碼。
下面的儲存過程,讓其返回一個指定的值,以指示執行狀態。
CREATE PROC spTestReturns AS DECLARE @MyMessage nvarchar(50); DECLARE @MyOtherMessage nvarchar(50); SELECT @MyMessage = '第一個RETURN'; PRINT @MyMessage; RETURN 100; --將這裡改成返回100 SELECT @MyOtherMessage = '第二個RETURN'; PRINT @MyOtherMessage; RETURN;
執行之後,顯示結果如下:
DECLARE @Return int EXEC @Return = spTestReturns //第一個RETURN SELECT @Return //返回100
對於呼叫儲存過程需要注意以下幾點:
可以利用儲存過程提供的安全性程式碼和程式碼封裝方面的好處,但還是忽略了預編譯程式碼方面的影響。可以迴避未使用正確的查詢計劃的問題,因為可以確保為特定一次執行建立新的計劃。方法就是使用WITH RECOMPILE選項。
使用該選項的方式有兩種:
1、可以在執行時包含WITH RECOMPILE。這告訴SQL Server拋棄已有的執行計劃並且建立一個新的計劃-但只是這一次。也就是說,只是這次使用WITH RECOMPILE選項來執行儲存過程。
EXEC spMySproc '1/1/2004' WITH RECOMPILE
2、也可以通過在儲存過程中包含WITH RECOMPILE選項來使之變得更持久。
如果使用這種方式,則在CREATE PROC或ALTER PROC語句中的AS語句前新增WITH RECOMPILE選項即可。如果通過該選項建立儲存過程,那麼無論在執行時選擇了其他什麼選項,每次執行儲存過程都會重新編譯它。
ALTER PROC spPerson AS SELECT * FROM Person WHERE Id = 45
DROP PROC|PROCEDURE <sproc name>[;]
sp_help Person
看一張表有那些資訊,有約束,儲存過程,自定義函數等等資訊。
sp_helpdb TestDataCenter
當然也可以不帶引數,顯示當前資料庫連線下的所有資料庫資訊。
這張圖幾乎包含了資料庫的所有資訊了。有了這張圖,想了解一個資料庫的資訊就簡單了。
sp_helpindex Person
注意引數中是表名,上面的Person就是表名,而不是索引名稱。
sp_helpconstraint Person
注意引數是表名。
sp_helpfile TestDataCenter
注意引數是檔案的邏輯名稱。也可以不帶引數,輸出當前資料庫的所有檔案資訊。
sp_helpfilegroup 'PRIMARY'
引數名中是檔案組的邏輯名稱,當然也可以不帶引數,這樣就僅僅輸出當前資料庫的檔案組資訊。
顯示結果如下:
sp_helptext spName
返回的是什麼?就是定義的程式碼。
到此這篇關於Sql Server儲存過程的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45