У меня есть таблица записей аудита, в которую я пишу. Я подключаюсь к MyDb, в которой есть хранимая процедура с именем «CreateAudit», которая является сквозной хранимой процедурой, к другой базе данных на той же машине, называемой MyOther DB, с хранимой процедурой под названием «CreatedAudit».
Другими словами, в MyDB у меня есть CreateAudit, который выполняет следующее EXEC dbo.MyOtherDB.CreateAudit.
Я вызываю хранимую процедуру MyDb CreateAudit из моего приложения, используя в качестве DAL дозвуковую. В первый раз, когда я это называю, я называю это следующим (псевдокод):
int openStatus, closeStatus = 0;
openStatus = Convert.ToInt32(SPs.LogAccess(userId, "OPENED"));
closeStatus = Convert.ToInt32(SPs.LogAccess(userId, "CLOSED"));
Это упрощено, но вот что называет LogAccess:
ALTER procedure [dbo].[LogAccess]
@UserID uniqueid,
@Action varchar(10),
@Status integer output
as
DECLARE @mStatus INT
EXEC [MyOtherDb].[dbo].[LogAccess]
@UserID = @UserID,
@Action = @Action,
@Status = @mStatus OUTPUT
select @mStatus
Во второй хранимой процедуре предполагается пометить запись, созданную CreateAudit (recordId, "Opened"), статусом закрыто.
Это прекрасно работает, если я запускаю их независимо друг от друга или даже если я вставляю их в анализатор запросов. Однако при выполнении из приложения запись не помечается как «Закрытая».
Когда я запускаю профилировщик SQL, я вижу, что оба запроса выполнялись, и если я копирую запросы и запускаю их из анализатора запросов, запись помечается как закрытая 100% времени!
Когда я запускаю его из приложения, примерно один раз каждые 20 раз, запись успешно помечается как закрытая, остальные 19 раз ничего не происходит, но я не получаю сообщение об ошибке!
Можно ли приложению .NET пропустить вывод из первой хранимой процедуры и начать выполнение второй хранимой процедуры до создания записи в первой?
Когда я добавляю «WAITFOR DELAY '00: 00: 00: 003 '» в начало моей хранимой процедуры, запись также закрывается 100% времени.
У меня кружится голова, есть идеи, почему это происходит!
Спасибо за любые ответы, очень интересно услышать, как это может произойти.