фонУдалить из FILETABLE с ограничением внешнего ключа
Я ищу в создании простой веб-приложения, часть из которых будет отображать изображений связанных с пунктами. Я решил изучить функцию FILETABLE
SQL Server, которая позволит напрямую загружать данные двоичного изображения в открытый ресурс. Таким образом, существует прецедент, позволяющий удалить файлы (строки в FILETABLE
) через проводник Windows. Этот пример реплицирует проблему, которая связана с наличием отношения внешнего ключа к FILETABLE
.
Структура
Уже добавлено изображение с помощью File Explorer на FILETABLE
с path_locator
из 0xFF5354649088A1EFEE8F747CD11030F80800170620
:
CREATE TABLE [dbo].[Image] AS FILETABLE WITH (FileTable_Directory = 'Images');
GO
CREATE TABLE [dbo].[ImageLink] (
[id] INT NOT NULL IDENTITY(1, 1)
,[path_locator] HIERARCHYID NOT NULL
,FOREIGN KEY ([path_locator]) REFERENCES [dbo].[Image] ([path_locator])
);
GO
INSERT INTO [dbo].[ImageLink] ([path_locator]) VALUES (0xFF5354649088A1EFEE8F747CD11030F80800170620);
Выпуск
При удалении файла с помощью File Explorer. ..
... файл исчезает из каталога, как сообщает Windows, удаление успех, но строка не удаляется из FILETABLE
.
Однако при попытке удалить с помощью SQL Server, брошено знакомая ошибка ссылки ограничения конфликта:
DELETE FROM [dbo].[Image] WHERE [path_locator] = 0xFF5354649088A1EFEE8F747CD11030F80800170620;
Msg 547, Level 16, State 0, Line 69
The DELETE statement conflicted with the REFERENCE constraint "FK__ImageLink__path___5070F446". The conflict occurred in database "FileTableTest", table "dbo.ImageLink", column 'path_locator'.
Я добавил AFTER DELETE
курок в FILETABLE
с целью удалить ссылающуюся строку, но это также не получить исполнение.
Вопрос
- Как я могу идти о пропаганде удалить через таблицу ссылок на удаление через Проводник Windows?
- Есть ли какой-нибудь крючок SQL Server/Windows API, который я могу обнаружить и выполнить DML-код, который обрабатывает удаление?
Update # 1
С BOL, следующий раздел вид подтверждает поведение, хотя и не дает никакой дополнительной информации.
транзакционные Семантика
При доступе файлы в FileTable с помощью файлового ввода/API для вывода, эти операции не связаны с какими-либо пользовательских транзакций, и имеют следующие дополнительные характеристики:
- Поскольку неконтрактированный доступ к данным FILESTREAM в FileTable не связан ни с какой транзакцией, он не имеет какой-либо конкретной семантики изоляции. Однако SQL Server может использовать внутренние транзакции для обеспечения использования семантики блокировки или параллелизма в данных FileTable. Любые внутренние транзакции этого типа выполняются с изоляцией с фиксацией чтения.
Пожалуйста, поделитесь результатом 'SELECT * FROM sys.database_filestream_options' – lad2025
@ lad2025' non_trasacted_access = 2, non_transacted_access_desc = «FULL'' –