Подтвердить что ты не робот

Просмотр SQL, подготовленного с помощью sp_prepare

Я искал приложение, использующее базу данных SQL Server, и я вижу много вызовов sp_execute.

Я не могу найти вызовы sp_prepare.

Как вы можете проверить все подготовленные операторы SQL в памяти?

4b9b3361

Ответ 1

Я искал способ увидеть фактические операторы SQL, выполняемые sp_execute в SQL Server 2008 R2 Profiler.

Чтобы сделать это, я создал новую трассировку и щелкнул вкладку "Выбор событий". Я выбрал "Показать все события" и проверил Хранимые процедуры > SP: StmtCompleted. Запустив трассировку, я смог увидеть фактические операторы SQL.

Ответ 2

Я столкнулся с этой проблемой. SQL Profiler не записывал оператор sp_prepare, поскольку он произошел до того, как трассировка SQL Profiler начала работать. Различные публикации, которые полагаются на sys.dm_exec_sql_text, не помогли, потому что я не смог найти правильное значение sql_handle или plan_handle для предоставления этой хранимой процедуры.

Я нашел решение от этого сообщения в блоге: в SQL Profiler щелкните флажок " Показать все события" а затем в заголовке Сохраненные процедуры выберите " SP: CacheHit".

В полученном в результате SQL-профайлере вы увидите строку SP: CacheHit ", содержащую запрос кэшированного SQL рядом с вашим RPC: Starting... sp_execute".

Затем вы можете восстановить и повторно выполнить полный оператор SQL в SSMS, если хотите:

exec sp_executesql @stmt=N'{statement from SP:CacheHit}', 
  @params=N'{parameter declaration from  SP:CacheHit}',
  @param1={value}, {...parameters from RPC:Starting sp_execute statement}

Ответ 3

Следуя вышеприведенному комментарию, я нашел ряд релевантных ссылок:

Как узнать, какая команда sp_execute запущена (без использования Profiler)

Выполняется SP_EXECUTE... что?

См. запрос в sp_execute

У Microsoft есть документация, но это может быть сложная сложность (как всегда). Если указатель плана известен, вы можете использовать это:

sys.dm_exec_sql_text (Transact-SQL)

Это табличная функция. Вы можете увидеть статью в блоге здесь, в которой используются такие табличные функции для извлечения объектных зависимостей для действительного дескриптора скомпилированного (подготовленного) плана.