如何查找在SQL Server事件探查器跟踪中报告的错误?

问题描述:

我在使用profiler的Sql Server 2005上运行跟踪,需要找出导致报告错误的原因。如何查找在SQL Server事件探查器跟踪中报告的错误?

我用“空白”模板,选择下列事件中的所有列:

  • 异常
  • 交易所溢油事件
  • 执行警告
  • 哈希警告
  • 缺少列统计
  • 缺失加入谓词

我注意到了 “的TextData” 列数这些错误的:

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

我查找了错误(错误的语法,无效的对象名称),但我怎么知道什么存储过程或查询造成了他们?

不要担心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

在sql 2005中你不行。 您必须运行SQL的Profiler跟踪:StmtStarting,SQL:StmtCompleted,用户错误消息和异常事件,包含文本,事务ID,事件序列和otehr列,以获取正在发生的事情的图片。

+0

我添加了SQL:StmtStarting和SQL:StmtCompleted,但只有“USE DBname”。我切换到SP:开始和SP:完成,并获得了命令。 – 2009-05-04 13:48:50