我在使用profiler的Sql Server 2005上運行跟蹤,需要找出導致報告錯誤的原因。如何查找在SQL Server事件探查器跟蹤中報告的錯誤?
我用「空白」模板,選擇下列事件中的所有列:
- 異常
- 交易所溢油事件
- 執行警告
- 哈希警告
- 缺少列統計
- 缺失加入謂詞
我注意到了 「的TextData」 列數這些錯誤的:
- 錯誤:156,嚴重性:16,狀態:0
- 錯誤:208,嚴重性:16,狀態:0
我查找了錯誤(錯誤的語法,無效的對象名稱),但我怎麼知道什麼存儲過程或查詢造成了他們?
我在使用profiler的Sql Server 2005上運行跟蹤,需要找出導致報告錯誤的原因。如何查找在SQL Server事件探查器跟蹤中報告的錯誤?
我用「空白」模板,選擇下列事件中的所有列:
我注意到了 「的TextData」 列數這些錯誤的:
我查找了錯誤(錯誤的語法,無效的對象名稱),但我怎麼知道什麼存儲過程或查詢造成了他們?
不要擔心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中看到延遲解析錯誤的唯一位置。
在sql 2005中你不行。 您必須運行SQL的Profiler跟蹤:StmtStarting,SQL:StmtCompleted,用戶錯誤消息和異常事件,包含文本,事務ID,事件序列和otehr列,以獲取正在發生的事情的圖片。
我添加了SQL:StmtStarting和SQL:StmtCompleted,但只有「USE DBname」。我切換到SP:開始和SP:完成,並獲得了命令。 – 2009-05-04 13:48:50
SPID似乎是將208行與SP相關聯的唯一方法:啓動和SP:已完成的行。使用它,這似乎是正確的,這些208s似乎總是在調用使用臨時表的存儲過程之前發生。 – 2009-05-04 13:49:51