如何使用SQL Profiler 找到語法錯誤

 

SQL Profiler

我們在執行SQL 語法時, 常發生SQL Server 端的錯誤, 但無法直接由Client 端的訊息看出來,此時我們可透過SQL Profiler 來找到Server 執行的錯誤, 只是Server 端的事件那麼多該如何找到錯誤呢?

一個很重要的觀念, SQL Server 不論執行的結果如何, 正確或錯誤都會產生Complete的事件,

如 StoreProcedure 的 SP:Completed/StmtCompleted

  一般SQL 的SQL:StmtCompleted / BatchCompleted.

奇怪了, 都錯了怎麼還有BatchCompleted 呢? 別緊張在Error 欄也有寫執行結果(1-Error) ,因此我們可以針對執行結果為1-Error 的部份, 來看它的錯誤原因,只要設定Exception 及User Error Message , 並針對所需的指令類別(StoreProcedure或一般SQL)所需的Completed 事件, 就可以找到錯誤的指令.

 

實際應用的案例

以下是一個我們在Client 端程式所發生的錯誤, 可是單由Client端的訊息看不出來錯在那裡,

執行資料庫Schema 更新失敗(Schema Ver.18 update failed)

image

接下來要找到失敗的原因.

1. 開啟 SQL Profiler.

開始-->程式集—>Mircosoft SQL Server 2005->效能工具->SQL Server Profiler.

image

2.新增追蹤

image

3.連結資料庫

image

4.設定所需的事件

預設項目除了 RPC:Completed , SP:StmtCompleted, SQL BatchCompleted 其餘均可取消.

image

 

5.勾選 顯示所有事件及顯示所有資料行.

image

6.選擇必要的事件

   對於找出一般SQL 指令的錯誤而言, 只需要設定三個值, 其餘可取消.

   設定Errors and Warnings 之 Exception 與User Error Message. TSQL 之SQL:BatchCompleted.

 

image

7. 如果確定Application Name 或資料庫可增加資料行篩選

例如在下例中, 增加DatabaseName 類似 BPM 才顯示.

image

8.開始執行, 由Trace 結果很容易看出是那一個指令發生錯誤.

在錯誤行上會先出現Exception , 再出現User Error Message, 由User Error Message可看出錯誤的訊息, 並可使用Exception 的錯誤代碼查詢錯誤訊息, 同時可以找SQL:BatchCompleted找到錯誤的指令碼,其Error 欄為 1-Error.

image

留言

這個網誌中的熱門文章

如何使用SQL Profiler 找到語法錯誤

如何將SQL Server 的查詢輸出寫入文字檔

AgilePoint逐級簽核與指定簽核層級範圍