2010-05-12 105 views
0

我最近一直在使用處理輸入XML文件的COM +組件,並根據提供的數據進行了大量數據庫更新。調試「不正確的語法」異常

運行SQL探查與事件類的異常,並且選擇了用戶錯誤消息,我看到:

異常錯誤:102,嚴重性:15,狀態:1個
用戶錯誤信息的語法不正確附近 '3'。

但是我真的很想看到由COM +組件提供的完整SQL。

對我來說,有沒有辦法使用Profiler或其他來攔截髮送到SQL Server的SQL語句?

本機使用的是SQL Server 2005,而COM +對象是用Delphi編寫的。

回答

1

需要的事件是SQL:BatchStarting或SQL:BatchCompleted。主要的困惑之處在於,在錯誤消息之後輸出SQL - 這在您思考時確實有意義,但可能並不直觀。

作爲一個例子,查詢SELECT * FROM Table WHERE ID=3 8(注意3和8之間的空間不正確),我收到以下輸出。

Exception Error: 102, Severity: 15, State: 1 
User Error Message Incorrect syntax near '8'. 
SQL:BatchStarting SELECT * FROM Table WHERE ID=3 8 
SQL:BatchCompleted SELECT * FROM Table WHERE ID=3 8 
1

在Profiler中,嘗試觀察事件SP:StmtStarting和SQL:StmtStarting,並在輸出中包含列TextData。

我認爲如果您在「事件選擇」選項卡上選中「顯示所有事件」複選框,那麼這些事件僅顯示在選擇列表中。

+0

我嘗試使用SP:StmtStarting和SQL:StmtStarting無濟於事,但在做這個測試我發現我想要的SQL被列入下SQL的錯誤後:BatchStarting(見我的答案)。我認爲它無法解析StmtStarting。 – MattH 2010-05-14 10:53:16