У меня проблема, я постараюсь ее резюмировать:
Я запускаю SQL Server Profiler, чтобы отслеживать вызов хранимой процедуры. Он показывает, что хранимая процедура вызывается, но на самом деле не выполняется.
Я знаю, что, поскольку хранимая процедура обновляет столбец, чтобы избежать параллелизма, и каждый вызов хранимой процедуры должен использовать разные (обновленные) параметры, поэтому, когда я запускаю вызов из профилировщика напрямую в SSMS, он работает нормально, тогда, если я его запустил во второй раз он дает проблему с параллелизмом, показывая, что в первый раз он фактически не запускался.
У меня закончились идеи, почему это происходит. SQL Server Profiler показывает, что хранимая процедура вызывается, но на самом деле она не вызывается!
Спасибо и привет.
РЕДАКТИРОВАТЬ: подробнее
- Хранимая процедура отлично работает локально
- Если мы запустим ТОЧНО ту же строку, которую показывает профилировщик, в целевой БД, отслеживаемой профилировщиком, хранимая процедура работает отлично.
- Я запускаю его с помощью Entity Framework. Однако перед вызовом этой хранимой процедуры я вызываю некоторые другие хранимые процедуры, затем вызываю эту проблемную хранимую процедуру и сохраняю изменения. Также сохраняются изменения из предыдущих хранимых процедур.
- Когда я вызываю хранимую процедуру локально, я получаю ОК, если я запускаю хранимую процедуру с теми же значениями, я получаю «ошибку параллелизма», потому что каждый вызов должен использовать другое значение в каком-то параметре (параллелизм). Зная, что если я запускаю профилировщик в своей локальной БД, я вижу, что хранимая процедура выполняется, затем я пытаюсь запустить ту же строку и получаю ошибку параллелизма, что означает, что хранимая процедура была запущена правильно. Когда я запускаю профилировщик в целевой БД, я вижу, что выполняется хранимая процедура, затем я пытаюсь запустить ту же строку и получаю ОК, означающее, что она никогда не запускалась. Если я попытаюсь запустить эту строку снова, у меня возникнет проблема с параллелизмом.
По сути, это какая-то странная вещь, наверное, самая странная, которую я когда-либо видел. Профилировщик SQL Server показывает вызываемую хранимую процедуру, но, по-видимому, она никогда не завершается, но хранимая процедура в порядке, зная тот факт, что если я запустил ТОЧНЫЙ ЖЕ вызов, который показал профилировщик, он будет работать нормально.
Это немного странно, но я надеюсь, что это немного проясняет ситуацию.
TransactionScope
, который прерывает транзакцию, когда возвращается какое-либо исключение (ошибка параллелизма). - person Pranav Singh   schedule 09.05.2014