2009-05-01 56 views
5

我在使用profiler的Sql Server 2005上運行跟蹤,需要找出導致報告錯誤的原因。如何查找在SQL Server事件探查器跟蹤中報告的錯誤?

我用「空白」模板,選擇下列事件中的所有列:

  • 異常
  • 交易所溢油事件
  • 執行警告
  • 哈希警告
  • 缺少列統計
  • 缺失加入謂詞

我注意到了 「的TextData」 列數這些錯誤的:

  • 錯誤:156,嚴重性:16,狀態:0
  • 錯誤:208,嚴重性:16,狀態:0

我查找了錯誤(錯誤的語法,無效的對象名稱),但我怎麼知道什麼存儲過程或查詢造成了他們?

回答

7

不要擔心208錯誤。 208是「找不到對象」。由於所謂的「延遲名稱解析」,Profiler會提取這些信息。

執行以下步驟。

CREATE PROCEDURE Demo AS 
    CREATE TABLE #Temp (ID int) 
    INSERT INTO #Temp VALUES (1) 
    SELECT ID FROM #Temp 
GO 

這PROC會沒有任何錯誤,但運行正常,如果你有一個探查器跟蹤運行後,您會看到錯誤208的一個或兩個實例是因爲表#TEMP不存在時,PROC開始,這是代碼解析和綁定的時間。綁定到底層對象的過程失敗。

一旦create table運行,其他語句會重新編譯並綁定到正確的表並運行而不會出錯。

您將在profiler中看到延遲解析錯誤的唯一位置。

+0

SPID似乎是將208行與SP相關聯的唯一方法:啓動和SP:已完成的行。使用它,這似乎是正確的,這些208s似乎總是在調用使用臨時表的存儲過程之前發生。 – 2009-05-04 13:49:51

1

在sql 2005中你不行。 您必須運行SQL的Profiler跟蹤:StmtStarting,SQL:StmtCompleted,用戶錯誤消息和異常事件,包含文本,事務ID,事件序列和otehr列,以獲取正在發生的事情的圖片。

+0

我添加了SQL:StmtStarting和SQL:StmtCompleted,但只有「USE DBname」。我切換到SP:開始和SP:完成,並獲得了命令。 – 2009-05-04 13:48:50

相關問題