2011-08-31 42 views
0

是否可以查看無法正確解析的SQL語句(例如形成的動態創建的查詢不會轉義保留字符)或執行時遇到問題(例如轉換錯誤)SQL 2008 Profiler中。如果是的話,我應該尋找什麼事件?在MS SQL 2008中查看失敗的SQL語句

+1

查看http://stackoverflow.com/questions/5199812/logging-erroneous-queries-only-on-sql-server/5199933#5199933。這是一個重量級的跟蹤,雖然事件仍然需要處理,即使大部分都會被濾除。 –

+0

這看起來正是我想要的。但是,即使使用過濾器錯誤<> 0或錯誤> = 1,我也會收到一些空值爲錯誤的事件。是否有可能根據過濾標準對其進行過濾。 – AlexC

+0

在設置過濾器來完成此操作時,Profiler UI中有一個複選框。無法準確記住文字的內容。 –

回答

2

經過進一步研究,由於效率的原因,使用sp_trace命令而不是profiler似乎更好。我使用這個腳本創建了一個跟蹤,用於查找形成嚴重的SQL。

declare @trace_id INT 

exec sp_trace_create @traceid = @trace_id OUTPUT,   
       @options = 2,  
       @tracefile = N'c:\trace_xxx' -- change filename to one that makes better sense 

select @trace_id AS trace_id 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 10 
      , @columnid = 1 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 12 
      , @columnid = 1 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 33 
      , @columnid = 1 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 10 
      , @columnid = 14 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 12 
      , @columnid = 14 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 33 
      , @columnid = 14 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 10 
      , @columnid = 15 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 12 
      , @columnid = 15 
      , @on = 1 

exec sp_trace_setevent @traceid = @trace_id 
      , @eventid = 33 
      , @columnid = 15 
      , @on = 1 


exec sp_trace_setfilter @traceid = @trace_id 
      , @columnid = 31 
      , @logical_operator = 0 
      , @comparison_operator = 2 
      , @value = 0 

exec sp_trace_setfilter @traceid = @trace_id 
      , @columnid = 1 
      , @logical_operator = 0 
      , @comparison_operator = 7 
      , @value = N'exec sp_reset_connection' 



exec sp_trace_setstatus @traceid = @trace_id , @status = 1