Какой у вас движок БД?
В Oracle вы можете использовать MINUS set set.
В MS SQLServer 2005 и новее вы можете использовать , КРОМЕ .
Данные FILESTREAM
подлежат управлению транзакциями и поэтому не удаляются мгновенно.
Вместо этого SQL Server
запускает сборщик мусора, который очищает старые данные, когда он уверен, что в конечном итоге он был удален.
Сборка мусора FILESTREAM
- это фоновая задача, которая запускается процессом контрольной точки базы данных. Контрольная точка запускается автоматически, когда создается достаточно журнала транзакций. Для получения дополнительной информации см. Электронную документацию по SQL Server 2008 , тему «КОНТРОЛЬНАЯ ТОЧКА
и активная часть журнала» ( http://msdn.microsoft.com/en- us / library / ms189573.aspx ). Учитывая, что операции с файламиFILESTREAM
минимально регистрируются в журнале транзакций базы данных, может пройти некоторое время, прежде чем количество сгенерированных записей журнала транзакций запустит процесс контрольной точки и произойдет сборка мусора. Если это становится проблемой, вы можете принудительно выполнить сборку мусора с помощью оператораCHECKPOINT
.
УДАЛИТЬ ИЗ tbl_XXX DECLARE @test CHECKPOINT @test = 0
Запустите это на своем сервере sql , и вы увидите, как файл получает также удален из файловой системы.
Вы можете установить количество минут или секунд, в течение которых сборщик мусора очистит файлы из файловой системы после выполнения операции удаления.
Спасибо
харанат