2012-11-02 18 views
1

(对不起,我长长的问题,我会尽量做到简明扼要。)几个基本的SQL事件探查器问题

我运行SQL Server探查和我追逐了一些性能问题。我对探查器的功能相对比较陌生,并且我已将这些追踪数据导出到一个表格中,以便我可以针对这些数据运行查询。

我一直在面对的一件事是一些看似奇怪的行为,对由跟踪导出生成的表格的TextData字段执行选择查询。它可能与该字段的数据类型有关(ntext,null)。我选择了特定的值,但获得了意想不到的结果。例如,如果我这样做:

select * from [TraceAnalyzer].dbo.TraceTable 

和我感兴趣的值是这样的:

exec [Sproc_of_interest] @parm1=992 

我愿意做这样的查询:

select * from [TraceAnalyzer].dbo.TraceTable 
where TextData like '%exec [Sproc_of_interest] @parm1=%' 

但返回结果为空。

另外,如果我不喜欢的查询:

select * from [TraceAnalyzer].dbo.TraceTable 
where TextData like '%exec [Sproc_of_interest]%' 

我得到意想不到的TextData值一样exec sp_reset_connection

会在方括号中的标准搞乱的东西了?我试着省略它们,但是这只是排除了一切。我不知道SQL选择查询中的转义字符,但是当我从其中一个违规记录中复制/粘贴值时,粘贴值看起来并不包含任何符合原始查询条件的内容。

任何见解将不胜感激。谢谢。

+1

'[Sproc_of_interest]'被解释为在模式语法中匹配的一组值。因为无论如何你使用的是一个通配符,它​​可能更容易只是[使用'CHARINDEX'](http://stackoverflow.com/questions/258757/escape-a-string-in-sql-server-so-that-it -is-safe-to-use-like-expression/9242060#9242060)而不是转义所有特殊字符。 –

+0

谢谢马丁。这似乎让我得到了我需要的东西。重新发布它作为答案,我给你接受的标志。 :-) – BobC

回答

0

[Sproc_of_interest]在模式语法中被解释为匹配集合S,p,r,o,c,_,o,f,_,i,n,t,e,r,e,s,t中的一个字符。

解决这个问题的三种可能的方法如下。

1)逃生[用方括号

LIKE '%exec [[]Sproc_of_interest] @parm1=%' 

2)使用转义字符

LIKE 'exec \[Sproc_of_interest] @parm1=' ESCAPE '\' 

3)使用CHARINDEX代替逸出任何

WHERE CHARINDEX('exec [Sproc_of_interest] @parm1=' , TextData) > 0 
+0

您可能想澄清一下“c_o'范围内的含义:下划线是单个字符的通配符,而不是范围。那将是'c-o'。 – Pondlife

+0

@Pondlife - 好点,纠正我确实在想'''' –