EXEC хранимая процедура внутри другого не ждет, чтобы закончить - PullRequest
2 голосов
/ 23 марта 2010

У меня есть хранимая процедура, которая выполняет другую процедуру внутри нее. Второй иногда бежит, но первый, кажется, заканчивает, прежде чем ждать второго. Это привело к отсутствию данных, которые должны были быть обновлены второй процедурой. Есть ли предел времени ожидания в первой процедуре, и может ли он быть продлен?

Ответы [ 3 ]

2 голосов
/ 23 марта 2010

создать новую таблицу:

LogInfo
LogID     int auto number/identity primary key
LogDate   date default current date and time
LogValue  string

в каждую процедуру добавляйте INSERT, как это:

INSERT INTO LogInfo (LogValue) VALUES ('starting procedure A')
...
INSERT INTO LogInfo (LogValue) VALUES ('Calling procedure B')
...

INSERT INTO LogInfo (LogValue) VALUES ('ending procedure A')

тогда сделай это

SELECT * FROM LogInfo ORDER BY LogID 

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

starting procedure A
Calling procedure B
starting procedure B
ending procedure B
ending procedure A
1 голос
/ 23 марта 2010

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

1 голос
/ 23 марта 2010

Я подозреваю, что внутренняя хранимая процедура фактически завершается / завершается, поскольку хранимые процедуры выполняются последовательно и симметрично.

Вы можете попытаться написать сценарий внешней хранимой процедуры и перенести ее в Management Studio, удалить объявление создания процедуры, заменить аргументы объявлением и добавить операторы SET, чтобы установить для них значения, которые вы используете при выполнении теста. Кроме того, поместите оператор Print после вызова внутренней хранимой процедуры и посмотрите, завершится ли он.

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