Обработка таймаутов внутри хранимых процедур - PullRequest
0 голосов
/ 25 августа 2010

У меня есть хранимая процедура, которая выполняет пару запросов. Каждый запрос может завершиться ошибкой из-за тайм-аута.

Я все еще хочу продолжить выполнение других запросов. Это возможно? Есть ли попытка поймать работу для тайм-аутов?

Я могу иметь разные sps для каждого запроса, но это усложнит приложение.

Ответы [ 4 ]

4 голосов
/ 25 августа 2010

Как вы запускаете SQL?

Сам по себе SQL не имеет тайм-аута, поэтому то, что вы описываете как проблему, невозможно.

Тайм-аут всегда обрабатывается на уровне подключения / приложения подключения. SQL Server рад, что вызовы SQL длятся часами или днями.

Таким образом, если вы не сделаете что-то «смешное» / необычное, запросы внутри SP не будут истекать - соединение, которое вызывает процедуру, прекратит работу и, таким образом, откат транзакции.

1 голос
/ 25 августа 2010

Если вы часто получаете тайм-ауты, исправление состоит в том, чтобы повысить производительность запросов, чтобы не пытаться пропускать тайм-ауты и переходить к следующему запросу.

Тайм-ауты, как правило, являются признаком плохого дизайна запроса (номер 1причина), плохой дизайн базы данных (причина номер 2) или неадекватное оборудование.Все три поправимы.Так что исправь их.

1 голос
/ 25 августа 2010

Запросы в хранимых процедурах не истекают - пакет SQL, который выполняет время ожидания sproc - так что нет, вы не можете «поймать» и обработать тайм-ауты.

0 голосов
/ 25 августа 2010

Краткий ответ: нет. Время ожидания аналогично тому, как вы отменяете свой запрос в SSMS: CATCH его не перехватит. Я написал стандартный ответ: Ваш блок TRY может не работать, и ваш блок CATCH может быть обойден

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...