Выполнение хранимой процедуры и триггеров в SQL Server - PullRequest
0 голосов
/ 21 октября 2018

Предположим, у меня есть следующая ситуация в базе данных SQL Server.

Это таблицы в базе данных:

  1. Table1
  2. Table2
    • Связанные триггеры: триггер при вставке (trigger1)
  3. Table3

База данных содержит одну хранимую процедуру sp1 (с параметрами).

Теперь вот как sp1 работает:

  1. sp1 собирает несколько строк из Table1 за 2 секунды
  2. В зависимости от значений этих строк, может бытьнекоторые строки будут вставлены в table2 (вставка занимает 1 секунду), и, конечно, вставка заставляет trigger1 запускать
  3. trigger1 вставляет или обновляет некоторые строки в Table3 (это занимает 2 секундыподробнее)
  4. sp1 еще не выполнено после шагов 1-3, оно продолжает работать в течение 2 секунд обработки, а затем завершается

Представьте, что есть приложение (скажем,Java, C # или что-то еще) вызывая sp1 100 раз подряд (вызов происходит намного быстрее, чемВыполнение sp1).

Я хочу понять, как работает поток обработки.

Есть ли параллелизм?

Дождется ли sp1 завершения trigger1, прежде чем перейти к шагу 4?

При вызове sp1 из приложения, делает ликаждый звонок должен ждать, прежде чем перейти к следующему звонку?

1 Ответ

0 голосов
/ 22 октября 2018

Я сделал демонстрацию, чтобы проверить эту ситуацию, и вот что я нашел:

1- sp1 всегда ждет триггера, прежде чем продолжить оставшуюся обработку.

2- Вызовsp1 из приложения будет ожидать завершения выполнения, если только вызов не асинхронный.

...