(对不起,我会尽量简明扼要。)
我正在运行SQL Server Profiler,而我正在追逐一些性能问题。我对分析器的作用相对较新,我已将跟踪导出到表中,因此我可以对数据运行查询。
我遇到的一件事就是对跟踪导出生成的表格的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 select查询中的转义字符,但是当我从其中一个违规记录中复制/粘贴该值时,粘贴的值似乎不包含任何符合原始查询条件的值。
任何见解都将不胜感激。感谢。
答案 0 :(得分:1)
[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