如何使用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)
接下來要找到失敗的原因.
1. 開啟 SQL Profiler.
開始-->程式集—>Mircosoft SQL Server 2005->效能工具->SQL Server Profiler.
2.新增追蹤
3.連結資料庫
4.設定所需的事件
預設項目除了 RPC:Completed , SP:StmtCompleted, SQL BatchCompleted 其餘均可取消.
5.勾選 顯示所有事件及顯示所有資料行.
6.選擇必要的事件
對於找出一般SQL 指令的錯誤而言, 只需要設定三個值, 其餘可取消.
設定Errors and Warnings 之 Exception 與User Error Message. TSQL 之SQL:BatchCompleted.
7. 如果確定Application Name 或資料庫可增加資料行篩選
例如在下例中, 增加DatabaseName 類似 BPM 才顯示.
8.開始執行, 由Trace 結果很容易看出是那一個指令發生錯誤.
在錯誤行上會先出現Exception , 再出現User Error Message, 由User Error Message可看出錯誤的訊息, 並可使用Exception 的錯誤代碼查詢錯誤訊息, 同時可以找SQL:BatchCompleted找到錯誤的指令碼,其Error 欄為 1-Error.
留言
張貼留言