Пара основных вопросов о Sql Profiler

(Извините за длинный вопрос, я постараюсь быть кратким.)

Я использую 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

Могут ли квадратные скобки в критериях все испортить? Я пробовал их опустить, но это исключает все. Мне не известны escape-символы в запросах выбора SQL, но когда я копирую / вставляю значение из одной из проблемных записей, вставленное значение, похоже, не содержит ничего, что соответствовало бы критериям исходного запроса.

Приветствуются любые идеи. Спасибо.


person BobC    schedule 02.11.2012    source источник
comment
[Sproc_of_interest] интерпретируется как набор значений, соответствующих синтаксису шаблона. Поскольку вы в любом случае используете ведущий подстановочный знак, вероятно, проще просто использовать CHARINDEX вместо экранирования всех специальных символов.   -  person Martin Smith    schedule 02.11.2012
comment
Спасибо, Мартин. Кажется, это дает мне то, что мне нужно. Отправьте его как ответ, и я поставлю вам принятую оценку. :-)   -  person BobC    schedule 02.11.2012


Ответы (1)


[Sproc_of_interest] в синтаксисе шаблона интерпретируется как соответствие одному символу из набора S,p,r,o,c,_,o,f,_,i,n,t,e,r,e,s,t.

Ниже приведены три возможных способа решения этой проблемы.

1) Escape [ в квадратных скобках

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

2) Используйте escape-символ

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

3) Используйте CHARINDEX вместо экранирования чего-либо

WHERE CHARINDEX('exec [Sproc_of_interest] @parm1=' , TextData) > 0
person Martin Smith    schedule 02.11.2012
comment
Возможно, вы захотите уточнить, что означает в диапазоне c_o: подчеркивание - это подстановочный знак для одного символа, а не для диапазона. Это было бы c-o. - person Pondlife; 02.11.2012
comment
@Pondlife - Хороший момент, поправил, я действительно думал о - - person Martin Smith; 02.11.2012