2010-11-01 54 views
1

查詢:SQL嘗試捕捉造成近期變量的確切錯誤

BEGIN TRY 
    SELECT @AccountNumber, 
      @AccountSuffix, 
      @Sedat, 
      @Dedo, 
      @Payalo, 
      @Artisto 
    FROM SWORDBROS 
    WHERE AMAZING ='HAPPENS' 

    END TRY 
    EGIN CATCH 
     Print @Sedat 
    END CATCH 

我怎樣才能獲得@Sedat,這可能嗎? SQL 2005,它將在一個SP

回答

3

像這樣,不是嗎?

BEGIN TRY 
    SELECT @AccountNumber, 
     @AccountSuffix, 
     @Sedat, 
     @Dedo, 
     @Payalo, 
     @Artisto 
    FROM SWORDBROS 
    WHERE AMAZING ='HAPPENS' 

END TRY 
BEGIN CATCH 
    --error handling only 
END CATCH 

--There is no finally block like .net 
Print @Sedat 
0

你正在使用哪個數據庫? 也是,哪種編程語言是這樣的?

通常會有一個INTO子句和一些聲明的局部變量。

您的查詢也應該有一個FROM子句至少

0

目前尚不清楚,如果你期待返回值被放置到@變量,或者您是否想要動態地指定要選擇哪一列。在Sql Server存儲過程中,您通常會返回結果集,而不是一堆單獨的變量。如果您希望返回列值,您擁有的語法將不起作用,因爲您擁有的語法將根據傳遞到存儲過程的列名稱動態指定想要的列。而這是行不通的,因爲存儲過程必須知道在存儲過程中進行分析時要處理哪些列。現在,如果從數據庫讀取出現問題(通信關閉,磁盤錯誤等),則會觸發except子句,在這種情況下,將不會知道任何列值。

使用Sql查詢分析器工具(在您選擇數據庫後,在SqlManager中的「工具」菜單下)來定義您的存儲過程並對其進行測試。如果您在安裝SqlManager時安裝了文檔,請轉到開始>程序> Microsoft Sql Server>聯機叢書,然後打開「Transact-SQL參考」節點以獲取有關可以完成的操作的文檔。

1

在一個過程中,當我想捕捉導致erorr的確切值時,這就是我所做的。我聲明瞭一個表變量(非常重要的是一個表變量而不是臨時表),它具有我想要獲取信息的字段。我隨着記錄填充表格變量。在multitep proc中,如果我想查看誰的進程或者只有一條記錄(如果我遇到錯誤(我通常在catch塊中填充)),那麼我會爲每個步驟添加一條記錄。然後在catch塊中,我將回滾事務,然後將可變表的內容插入到永久異常處理表中。如果你願意的話,你也可以選擇這個表格,但是如果我遇到這個麻煩的話,它通常是一個自動化過程,我需要以後能夠研究這個問題,而不是看到問題因爲我沒有在我的機器上運行它,或者我可以看到選擇或打印語句。通過使用即使在回滾之後仍保留在範圍中的表變量,我的信息仍可供我登錄我的異常記錄表。但重要的是,在回滾之後執行任何permananent表的日誌記錄,否則該過程將與其他所有內容一起回滾。