2010-05-12 3 views
0

Я недавно работал с компонентом COM +, который обрабатывает входной файл XML и производит ряд обновлений баз данных на основе предоставленных данных.Отладка «Неправильный синтаксис» Исключение

Запуск SQL Profiler с EventClass Exception, и сообщения об ошибках пользователя, выбранного, я вижу:

Exception Ошибка: 102, уровень опасности: 15, состояние: Ошибка 1
пользователя Сообщение Неправильный синтаксис около '3'.

Однако я действительно хочу видеть полный SQL, который поставляется компонентом COM +.

Есть ли в любом случае для меня использование Profiler или другого для перехвата оператора SQL, отправленного на SQL Server?

Эта машина использует SQL Server 2005, а объект COM + написан в Delphi.

ответ

1

Необходимые события: SQL: BatchStarting или SQL: BatchCompleted. Основная путаница заключается в том, что SQL выводится ПОСЛЕ сообщений об ошибках - что имеет смысл, когда вы об этом думаете, но не может быть интуитивным.

В качестве примера, с запросом SELECT * FROM Table WHERE ID=3 8 (обратите внимание на неправильное пространство между 3 и 8), я получил следующий вывод.

Exception Error: 102, Severity: 15, State: 1 
User Error Message Incorrect syntax near '8'. 
SQL:BatchStarting SELECT * FROM Table WHERE ID=3 8 
SQL:BatchCompleted SELECT * FROM Table WHERE ID=3 8 
1

В профайлере попробуйте посмотреть события SP: StmtStarting и SQL: StmtStarting, а также включить столбец TextData в вывод.

Я думаю, что эти события отображаются только в списке выбора, если вы установите флажок «Показать все события» на вкладке «Выбор событий».

+0

Я попытался с помощью SP: StmtStarting и SQL: StmtStarting без толка, но при этом этом тесте я заметил, что SQL Я хотел была включена после ошибки при SQL: BatchStarting (см моего ответа). Я предполагаю, что он не попадает в StmtStarting, поскольку он не разбирается. – MattH

Смежные вопросы