2

(对不起这个冗长的问题,我会尽量简洁。)

我正在运行 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 选择查询中的转义字符,但是当我从有问题的记录之一复制/粘贴值时,粘贴的值似乎不包含任何符合原始查询条件的内容。

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

4

1 回答 1

2

[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
于 2012-11-02T19:46:26.390 回答