2012-06-18 25 views
3

我們已經爲所有SQL存儲過程和函數實施了全局錯誤記錄器。當過程/函數遇到SQLEXCEPTIONSQLWARNING時,我們調用全局錯誤記錄器並執行GET STACKED DIAGNOSTICS語句。我們需要的部分數據是失敗的過程名稱。我沒有看到在GET DIAGNOSTICS可用返回值(ROUTINE_NAMEROUTINE_SCHEMA有條件地返回,我總是需要它)。如何找到調用存儲過程/函數

我們目前使用的是QWVRCSTK API,但我會假設SQL提供這種數據的方法。任何人都知道我可以做到這一點?

謝謝!

+0

對於SQL服務器,它將幫助http://msdn.microsoft.com/en-us/library/ms175976.aspx –

+1

請參閱http://stackoverflow.com/questions/2086973/recording-sql-server-call-stack-when-reporting-errors SQL不適合異常處理。你不通過客戶端來阻礙自己。 – Andomar

+0

SPECIFIC_SCHEMA可能有你正在尋找的東西,但它也只是有條件地返回。我自己使用調用堆棧API。 –

回答

0

Retrieve Job Information (QUSRJOBI) API可以返回作業中運行當前(最新)SQL語句的對象的限定名稱。使用格式JOBI0900來訪問作業的SQL信息。

您希望創建一個外部存儲過程來調用該API。 (如果您嘗試將其作爲SQL存儲過程來執行,則問題在於SP中的語句本身是當前語句;而您希望當前的SQL位於調用過程中。)

當此SP被調用,「當前」SQL應該是調用過程中的CALL語句。 (我希望這是有道理的。)

0
select @@ProcID 

返回當前Transact-SQL模塊的對象標識符(ID)。 Transact-SQL模塊可以是存儲過程,用戶定義的函數或觸發器。

從那裏你可以:

select OBJECT_NAME(@@ProcID) 

就會返回該對象的名稱。

+0

問題是關於IBM i上的DB2。 –