SQL Server FileTable:删除文件

时间:2016-11-26 08:38:37

标签: sql-server filetable

我使用filetable。当我从SQL Server的FileTable删除文件时,我希望从文件夹中删除文件,当我从文件夹中删除文件时,应该从filetable中删除它。

我还有第二个问题:filetable是在服务器中保存文件并读取文件(大于1MB的文件)的更快方法吗?

3 个答案:

答案 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