Как перехватить выполнение в SQL Server Management Studio

Я пытаюсь найти какое-либо руководство по перехвату выполнения запроса в SQL Server Management Studio.

Например: я хочу проверить запрос на предложение WHERE после нажатия кнопки «Выполнить».
Я уже создал дополнение в VS19 с проектом VSIX.
Я хочу остановить запрос, если в нем есть предложение WHERE, только для моего собственного входа и только из SQL Server Management Studio.
Должен ли я перехватывать нажатие кнопки или это можно сделать путем перехвата внутренних команд SSMS?

Любые советы будут оценены.


person Андрей Голубцов    schedule 15.11.2019    source источник
comment
Вы хотите остановить запрос или можете проанализировать его после выполнения? Вы хотите перехватывать все запросы от всех логинов или только от своих? Вы хотите перехватывать только запросы из SSMS или из любого другого источника? Количество запросов может быть огромным, если вы хотите увидеть все.   -  person EzLo    schedule 15.11.2019
comment
Я хочу остановить запрос, если в нем есть предложение Where, только для моего собственного входа в систему и только из SSMS. Насколько я понимаю, мне, вероятно, нужно подписаться на выполнение события, но я не знаю, как его поймать и что его запускает.   -  person Андрей Голубцов    schedule 15.11.2019


Ответы (2)


Вы можете собирать данные трассировки SQL и выполнять операторы SQL с помощью профилировщика SQL Server — в SSMS перейдите в «Инструменты» -> «Профилировщик SQL Server».

В Интернете есть много видеороликов и руководств о том, что нужно захватывать, но в целом, если вы используете стандартный шаблон, вы сможете сделать следующее.

  • Подготовьте среду разработки и подойдите к моменту, когда вы собираетесь нажать кнопку.
  • Запустите трассировку профилировщика. Совет: вы должны «Включить время остановки трассировки», если приложение или что-то блокирует ваш пользовательский интерфейс.
  • Нажмите кнопку, которая выполняет SQL.
  • Остановить след.

SQL, который вы ищете, должен быть указан в трассировке.

Что следует отметить:

  • Трассировка профиля влияет на производительность SQL — ограничьте время трассировки, особенно если она повлияет на другие
  • Если вы запускаете это на сервере SQL не на своем локальном компьютере, вы не сможете запустить трассировку (из-за настроек безопасности)
  • Стандартный шаблон фиксирует БОЛЬШОЕ количество событий. Будьте готовы к поиску
  • Как только вы освоитесь, вы можете снять отметку с нежелательных данных трассировки и отфильтровать конкретную информацию.
person Keith M    schedule 16.11.2019
comment
Поэтому, если я поймаю нужное мне событие, моим следующим шагом будет подписка на это событие, чтение переменных среды и изменение его. Знаете ли вы, могу ли я сделать это в своем проекте VSIX, ведь я добавил панель инструментов в SSMS? - person Андрей Голубцов; 16.11.2019
comment
Я перечитал ваш вопрос несколько раз и думаю, что неправильно его понял. Теперь я думаю, что вы пытаетесь создать расширение SSMS, которое просматривает запрос, который вы пытаетесь выполнить, чтобы увидеть, есть ли в нем предложение WHERE. Если это так, вы хотите выполнить другую работу над оператором SQL до его выполнения. Это правильно? - person Keith M; 16.11.2019

Можете ли вы описать, что вы планируете делать после того, как перехватите казнь? Я разрабатываю надстройку SSMSBoost, мы перехватываем выполнение без WHERE или "TRUNCATES". Возможно, мы сможем добавить функциональность, которую вы хотите, если она будет полезна для других пользователей.

person Andrei Rantsevich    schedule 21.11.2019
comment
Если в моем запросе UPDATE нет предложения WHERE, он должен выдать сообщение с чем-то вроде «Вы хотите продолжить это без WHERE?». . И он не будет выполняться до тех пор, пока пользователь не нажмет «да» или «нет». Я не знаю, сможете ли вы, но было бы здорово, если бы вы могли поделиться некоторыми примерами кода, как вы перехватываете нажатие кнопки EXECUTE, или просто поделитесь общей идеей и методами библиотек/инструментов/vsix, которые вы используете для этого? - person Андрей Голубцов; 26.11.2019
comment
Эта функция уже присутствует в SSMSBoost для SQL Server Management Studio. (Fatal Actions Guard) У нас пока нет отдельной версии для Visual Studio, но мы планируем ее создать. Однако, скорее всего, около 60% хуков и фич должны быть реализованы заново. - person Andrei Rantsevich; 27.11.2019