我使用filetable
。当我从SQL Server的FileTable
删除文件时,我希望从文件夹中删除文件,当我从文件夹中删除文件时,应该从filetable
中删除它。
我还有第二个问题:filetable
是在服务器中保存文件并读取文件(大于1MB的文件)的更快方法吗?
答案 0 :(得分:2)
对于第一个问题,一旦删除相对行(DELETE FROM ...
)并提交,就应删除文件。反之亦然(如果删除文件,相对行应该消失)。
对于通过网络共享公开的文件,情况确实如此, physical 文件将在以后删除,具体取决于恢复模型和文件流的垃圾收集过程(请参阅{ {3}}存储过程)。
对于第二个问题,访问总是比纯文件系统慢,因为SQL Server开销( find 时间会快几个数量级)。
与T-SQL访问相比,这一切都取决于您存储的blob的大小。 简而言之,如果您的blob小于1 MB,使用T-SQL应该更快。有关详细数据,请参阅此处:sp_filestream_force_garbage_collection。
答案 1 :(得分:0)
DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ]
table_name [ ,...n ]
[ ; ]
您可以使用此代码删除文件表。如果您只想删除某些特定数据,请使用Tsql语句中的where或having子句
答案 2 :(得分:0)
您必须记住的第一件事是,SQL Server中的文件表是使用它的最佳方式,因为这是管理器引擎,可帮助开发人员希望他们拥有管理文件的模式。 该管理器使用物理位置保存文件,并创建表以保留文件数据的基本信息。当删除文件时,文件表管理器会运行一段时间,并且会删除物理文件。
如果要立即删除物理文件,可以使用此子句:
checkpoint;
EXEC sp_filestream_force_garbage_collection @dbname = N'[DB Name]';
您必须记住在使用延迟从文件表中删除行后使用此子句 或在SQL触发器中使用它(删除后):
Create TRIGGER [Schema].[TriggerName]
ON [Schema].[TableName]
after DELETE
AS
declare @T table ([file_name] varchar(50),num_col int, num_marked int , num_unproce int ,last_col bigint)
BEGIN
checkpoint;
insert into @T EXEC sp_filestream_force_garbage_collection @dbname = N'[DB Name]';
END