powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Порядок работы хранимой процедуры
9 сообщений из 9, страница 1 из 1
Порядок работы хранимой процедуры
    #40030769
Pallich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Подскажите пожалуйста ответ на два вопроса.

1. Как в хранимой процедуре указать последовательность действий?
В обычном скрипте запроса можно использовать 'go'. В хранимке же 'go' не работает а только ';'.
Есть подозрение, что ';' не разделяет последовательность действий так как возникает ошибка блокировок которой нет если запустить этот же скрипт просто вручную (не в хранимке).

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

Спасибо.

SQL ver.2008R2
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030770
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallich
1. Как в хранимой процедуре указать последовательность действий?
В обычном скрипте запроса можно использовать 'go'. В хранимке же 'go' не работает а только ';'.
Есть подозрение, что ';' не разделяет последовательность действий так как возникает ошибка блокировок которой нет если запустить этот же скрипт просто вручную (не в хранимке).
Все действия выполняются последовательно, с ';' или без.
Pallich
2. Если есть несколько хранимок как их запустить одной хранимкой в четкой последовательности (после того как отработала первая - запускается вторая и т.д.).

exec ПерваяПроцедура
exec ВтораяПроцедура
и т.д.
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030771
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallich
...
1. Как в хранимой процедуре указать последовательность действий?
В обычном скрипте запроса можно использовать 'go'. В хранимке же 'go' не работает а только ';'.
Есть подозрение, что ';' не разделяет последовательность действий так как возникает ошибка блокировок которой нет если запустить этот же скрипт просто вручную (не в хранимке).

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

1. Все команды процедуры выполняются в порядке их следования друг за другом (если нет явных if then else и goto).
go - это разделитель блоков в скрипте. В процедуре необходимости в нем нет.
2. Пишете новую процедуру, состоящую из команд

exec <Процедура 1>;
exec <Процедура 2>;
...
exec <Процедура 3>


В чем проблема?
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030772
Pallich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Спелицин,

В процедуре есть цикл WHILE с условием.

Когда запускаю этот скрипт вне процедуры - все нормально отрабатывает.
если же скрипт в процедуре - вылетает ошибка блокировок:

сообщение: 1205, уровень: 13, состояние: 80, процедура: PROC, строка: 32 [строка начала пакета: 10]
Транзакция (идентификатор процесса 62) вызвала взаимоблокировку ресурсов поток | буфер связи с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.

У меня подозрение, что как то все одновременно пытается выполнить процедура.
Не знаю как быть(
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030784
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallich,

другие процессы же есть на сервере, которые используют те же таблицы.
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030785
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallich
У меня подозрение, что как то все одновременно пытается выполнить процедура.
Не, так не бывает, для обычного T-SQL кода.
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030789
Pallich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Теоретически есть.
Можно как то выполнять хранимку независимо от них?
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030791
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallich,

Если вам нужно гарантированное выполнение процедуры, ловите ошибку 1205 через try-catch, ставьте флаг (переменную) ошибки и выполняйте GOTO на начало пока не выполнится.
Или копайтесь, выясняйте, что является причиной взаимоблокировки. Решение зависит от потребностей.
Графы взаимоблокировок можно увидеть в Profiler, включив соответствующее событие для просмотра.
...
Рейтинг: 0 / 0
Порядок работы хранимой процедуры
    #40030852
monsenior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallich
Александр Спелицин,
вызвала взаимоблокировку ресурсов поток | буфер связи с другим процессом и стала жертвой взаимоблокировки.

поиграйтесь с maxdop 1 для запроса на котором падает ошибка
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Порядок работы хранимой процедуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]