Sql INSERT в FILETABLE с параметром OUTPUT создает тайм-аут и тупик - PullRequest
0 голосов
/ 02 июля 2018

Эта команда выполняется на моем сервере .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 снова вызывает ту же функцию, потому что меньшая версия оригинала также сохраняется. Но при повторном выполнении команды создается тупик.

Я использую транзакцию без установленного уровня изоляции.

Почему-то мне кажется, что при выполнении команды таблица все еще блокируется после того, как вставка прошла успешно. Я не могу понять, почему это происходит ...

...