首頁 資料庫 mysql教程 SQL Server 7.0 入門(八)

SQL Server 7.0 入門(八)

Dec 24, 2016 pm 05:41 PM
server sql

儲存過程中傳回結果
       從預存程序中傳回結果有三種方式:
1、  回傳結果集
這是客戶端應用程式傳回結果的最通用的方法。結果集是透過使用SELECT語句選擇資料產生的。結果集可以從永久表、臨時表或局部變數產生。將結果傳回到另一個預存程序不是有效的方法。預存程序不能存取另一個預存程序建立的結果集。
例如從永久表中傳回結果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromPermtable
AS
SELECT au_iname FROM authors
GO
AS
SELECT au_iname FROM authors
GO
AS
SELECT au_iname FROM authors
GO
GO ateResultFromVariable
AS
DECLARE @au_iname char(20)
SELECT @au_iname = au_iname FROM authors
WHERE au_id = '172-32-1176'
SELECT @au_id
GO
2.檢索出結果。如果某個參數在傳輸到預存程序中時定義成OUTPUT,則對該參數的任何修改在退出儲存之後仍然有效。
例如:
USE pubs
GO
CREATE PROCEDURE ap_SetOutputVar @count integer OUTPUT
AS
SELECT @count = count(*) FROM authors
GO
從輸出參數。
AS
DECLARE @num integer
EXECUTE ap_SetOutputVar @num OUTPUT
PRINT “the count is”+convert(char,@num)
GO
· 將遊標使用成OUTPUT參數。遊標可以使用OUTPUT(輸出)參數,但不能使用成輸入參數。也就是說,遊標可以作為結果返回,但卻不能傳輸到過程中去。當遊標被用作參數時,需要限定其為OUTPUT和VARYING。 VARYING關鍵字指出該結果集要用來支援輸出參數。這樣就提供了將結果集返回到呼叫過程的能力。
例如:
USE pubs
GO
CREATE PROCEDURE GetTitleCount @count_cursor CURSOR VARYING OUTPUT
AS
SET @count_cursor = CURSORDRO @count_cursor
GO
3 、  透過RETURN參數傳回狀態
這是一種從預存程序傳回錯誤碼的方法。預存程序總是傳回一個狀態值,使用者也可以使用RETURN語句傳回自己的狀態。
例如:
USE pubs
GO
CREATE PROCEDURE ap_SetReturnStatus
AS
DECLARE @count integer
SELECT @count = count(*) FROM authors
IF @RN
SELECT @?
例如檢索出回傳的狀態:
USE pubs
GO
CREATE PROCEDURE ap_GetReturnStatus
AS
DECLARE @status integer
EXECUTE @status = ap_ReturnturnStatus @status integer
EXECUTE @status = ap_ReturnturnStatus^cidoo essful”
GO

在儲存過程中進行錯誤處理
       如同其它程序一樣,在儲存過程中進行錯誤處理是非常重要的。系統變更@@error在執行每一個Transact SQL語句之後都會得到一個值。對於成功的執行,@@error的值為0,如果發生錯誤,則@@error中將包含錯誤訊息。 @@error系統變數對預存程序的錯誤處理是非常重要的。
       注意:為了防止錯誤,@@error所能設定的值在sysmessages表的「error」中反映了出來。
在預存程序中的錯誤有兩種類型:
1、    資料庫相關的錯誤
這些錯誤是由資料庫的不一致性引起的,系統使用非0的@@error值表示特定的資料庫問題。在Transact SQL執行之後,可以透過@@error獲得所出現的錯誤。如果發現@@error不為0,則必須採取必要的行動,大多數情況下,儲存將不再繼續進行處理而傳回。下面的範例展示了典型的獲取資料庫錯誤的方法。這個過程將錯誤代碼放置到輸出變數中,這樣,呼叫程式就能夠存取。
USE ?   SELECT @return_code = @@error
RETURN
END
ELSE
       @return_code = 0
GO
2、    業務邏輯錯誤
這些錯誤是由於違反了業務規則而引起的。要取得這些錯誤,首先需要定義業務規則,基於這些規則,需要在預存程序中增加必要的錯誤偵測程式碼。人們經常使用RAISERROR語句來通報這些錯誤。 RAISERROR提供了傳回使用者定義錯誤及將@@error變數設定成使用者定義錯誤號碼的能力。錯誤訊息可以被動態地建立,或者基於錯誤號碼從“sysmessages”表中檢索到。一旦出現了錯誤,錯誤就會以一種伺服器錯誤訊息的方式返回到客戶機。以下是RAISERROR指令的語法:
RAISERROR (msg_id | msg_str, severity, state
[, argument ][,…n]])
[WITH options]
Msg_id指明使用者定義訊息的id,該訊息儲存在「idmessamessa」系統表中。
Msg_str用於動態建立訊息的訊息字串。這與C語言中的「printf」非常相似。
Severity定義使用者賦值的錯誤訊息嚴重程度。
State是從1到127的任意整數值,它表示錯誤的呼叫狀態資訊。負數的state值將缺省為1。
OPTIONS指明錯誤的自訂選項。 OPTIONS的有效值如下:
1)  LOG。
將錯誤記錄到伺服器錯誤日誌和NT事件日誌中。此選項需要訊息帶有從19到25的嚴重程度。而只有系統管理員才能發出這種訊息。
2)  NOWAIT。
將訊息立即傳送到客戶端伺服器。
3)  SETERROR。
不管其嚴重程度如何,將@@error的值設為msg_id或5000。

遠端程序呼叫
       SQL Server提供了呼叫駐留在不同伺服器上的預存程序的能力。呼叫這樣的預存程序稱謂遠端預存程序呼叫。為了使得呼叫能從一個SQL Server轉移到另一個伺服器,兩個伺服器應該要相互定義成對方的有效遠端伺服器。
       設定遠端伺服器的設定:
       · 擴充某伺服器的群組。
       · 以滑鼠右鍵並點選「Properties」。
       · 設定選項「Allow other SQL Servers to connect remotely to this SQL server via RPC」。
       · 設定「Query time out」選項的值,指定從一個查詢處理傳回所能等待的秒數。缺省值為0,表示允許無限的等待時間。
       · 設定完成設定選項之後,點選「OK」。
       · 重新啟動伺服器之後,修改將會生效。
       · 在另一台遠端伺服器上重複相同的步驟。
       呼叫遠端預存程序需要指明伺服器的名稱,後帶資料庫的名稱及擁有者的名稱。下面是在不同的伺服器(Server2)上呼叫一個預存程序的範例。
Exec server2.pubs.dbo.myproc

豆豆的後話:
       這裡只是粗淺的介紹了SQL Server常用的知識,而物件也是基於SQL Server資料庫編寫應用程式的程式設計人員,而非資料庫管理者。但對於應用程式編程者,了解資料庫的管理也是非常有用的。建議在以後的時間自行去了解資料庫的管理,這對於最佳化程式也是相當有用的。

 以上就是SQL Server 7.0 入門(八)的內容,更多相關內容請關注PHP中文網(www.php.cn)!

————————全文完————————— 


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Hibernate 框架中 HQL 和 SQL 的差異是什麼? Hibernate 框架中 HQL 和 SQL 的差異是什麼? Apr 17, 2024 pm 02:57 PM

Hibernate 框架中 HQL 和 SQL 的差異是什麼?

Oracle SQL中除法運算的用法 Oracle SQL中除法運算的用法 Mar 10, 2024 pm 03:06 PM

Oracle SQL中除法運算的用法

SQL中的identity屬性是什麼意思? SQL中的identity屬性是什麼意思? Feb 19, 2024 am 11:24 AM

SQL中的identity屬性是什麼意思?

Oracle與DB2的SQL語法比較與區別 Oracle與DB2的SQL語法比較與區別 Mar 11, 2024 pm 12:09 PM

Oracle與DB2的SQL語法比較與區別

詳解MyBatis動態SQL標籤中的Set標籤功能 詳解MyBatis動態SQL標籤中的Set標籤功能 Feb 26, 2024 pm 07:48 PM

詳解MyBatis動態SQL標籤中的Set標籤功能

java怎麼透過MySQL驅動攔截器實現執行sql耗時計算 java怎麼透過MySQL驅動攔截器實現執行sql耗時計算 May 27, 2023 pm 01:10 PM

java怎麼透過MySQL驅動攔截器實現執行sql耗時計算

SQL出現5120錯誤怎麼解決 SQL出現5120錯誤怎麼解決 Mar 06, 2024 pm 04:33 PM

SQL出現5120錯誤怎麼解決

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

如何安裝、解除安裝、重設Windows伺服器備份

See all articles