我正在使用分析器在 Sql Server 2005 上运行跟踪,需要找出导致报告错误的原因。
我使用了“空白”模板,并选择了以下事件的所有列:
- 例外
- 交易所溢出事件
- 执行警告
- 哈希警告
- 缺少列统计信息
- 缺少连接谓词
我注意到“TextData”列中有许多这样的错误:
- 错误:156,严重性:16,状态:0
- 错误:208,严重性:16,状态:0
我查找了错误(语法不正确,对象名称无效),但我如何知道是什么存储过程或查询导致了它们?
我正在使用分析器在 Sql Server 2005 上运行跟踪,需要找出导致报告错误的原因。
我使用了“空白”模板,并选择了以下事件的所有列:
我注意到“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 启动时不存在,即代码被解析和绑定。绑定到底层对象的过程失败。
创建表运行后,其他语句将重新编译并绑定到正确的表并无错误地运行。
您会看到延迟解析错误的唯一地方是探查器。
在 sql 2005 中你不能。您必须运行 SQL:StmtStarting、SQL:StmtCompleted、用户错误消息和异常事件的分析器跟踪,其中包含您需要了解正在发生的事情的 text、transactionId、EventSequence 和 otehr 列。