如何查找导致SQL Server探查器跟踪中报告的错误的原因?

时间:2009-05-01 18:15:35

标签: sql-server sql-server-2005 profiler

我使用分析器在Sql Server 2005上运行跟踪,需要找出导致报告错误的原因。

我使用了“空白”模板,并选择了以下事件的所有列:

  • 异常
  • 兑换溢油事件
  • 执行警告
  • 哈希警告
  • 缺少列统计信息
  • 缺少加入谓词

我在“TextData”列中注意到了一些错误:

  • 错误:156,严重性:16,状态:0
  • 错误:208,严重性:16,状态:0

我查找了错误(语法错误,对象名称无效),但是如何判断存储过程或查询导致错误?

2 个答案:

答案 0 :(得分:8)

不要担心208错误。 208是“未找到对象”。由于所谓的“延迟名称解析”,Profiler会选择这些。

采取以下程序。

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

proc会在没有任何错误的情况下正常运行,但是如果你有一个运行的探查器跟踪,你会看到一个或两个错误实例208.这是因为当启动proc时表#Temp不存在,这是当代码被解析和绑定时。绑定到底层对象的过程失败。

一旦create table运行,其他语句将被重新编译并绑定到正确的表并运行而不会出错。

您将看到延迟解决方案错误的唯一位置在探查器中。

答案 1 :(得分:2)

在sql 2005中你不能。 你必须运行SQL的探查器跟踪:StmtStarting,SQL:StmtCompleted,用户错误消息和带有text,transactionId,EventSequence和otehr列的异常事件,以便了解正在发生的事情。