Эта команда выполняется на моем сервере .NET WebApi после подключения к моей локальной базе данных sql:
DECLARE @insertedID table (stream_id uniqueidentifier)
INSERT INTO FTPICTURE (name, file_stream)
OUTPUT inserted.stream_id into @insertedID
VALUES(@name, @file_stream);
SELECT *
FROM @insertedID
С помощью этой команды я могу вставить файл изображения в свою базу данных sql, хранящуюся в файловой таблице. Проблема времени ожидания и взаимоблокировки возникает, когда этот оператор выполняется с двумя или более входящими запросами. Первый поток может выполнить код в обычном режиме и получает stream_id из вставленного файла через объект insertID. Затем второй поток выполняет код, но должен ждать по какой-то причине, которую я не могу объяснить. Первый поток продолжает работу с кодом, пока второй поток не выдаст ошибку истечения времени ожидания. Поток 1 снова вызывает ту же функцию, потому что меньшая версия оригинала также сохраняется. Но при повторном выполнении команды создается тупик.
Я использую транзакцию без установленного уровня изоляции.
Почему-то мне кажется, что при выполнении команды таблица все еще блокируется после того, как вставка прошла успешно. Я не могу понять, почему это происходит ...