1

我用filetable. 当我从 SQL Server 中删除文件FileTable时,我希望将文件从文件夹中删除,而当我从文件夹中删除文件时,它应该从filetable.

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

4

3 回答 3

3

对于第一个问题,应在删除相关行 ( DELETE FROM ...) 并提交后立即删除文件。这同样适用于反向(如果您删除文件,则相关行应该消失)。

对于通过网络共享公开的文件也是如此,稍后将删除物理文件,具体取决于恢复模型和文件流的垃圾收集过程(请参阅sp_filestream_force_garbage_collection存储过程)。

对于第二个问题,由于 SQL Server 开销,访问总是比纯文件系统慢(尽管查找时间会快几个数量级)。

但是,与 T-SQL 访问相比,这完全取决于您存储的 blob 的大小。简而言之,如果您的 blob 小于 1 MB,则使用 T-SQL 应该更快。请参阅此处:有关 FILESTREAM 实现的最佳实践以获取更详细的数据。

于 2016-11-26T12:08:58.237 回答
0

first thing that you must remember File Table in SQL Server is best way that you can use it because of this is manager engine for helping to developer that they want to have pattern for managing files. this manger use physical place for saving files and create table for keeping basic information of file data.when you are deleted file,File Table manager have job that run some times and it is deleted physical file.

if you want to delete physical file immediately you can use this clause:

 checkpoint;
 EXEC sp_filestream_force_garbage_collection @dbname = N'[DB Name]';    

you must remember use this clause after delete row from file table with delay or use it in SQL Trigger (after delete) :

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
于 2018-12-31T05:09:16.113 回答
0
DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ]  
table_name [ ,...n ]  
[ ; ]  

您可以使用此代码删除文件表。如果您只想删除某些特定数据,请在 Tsql 语句中使用 where 或有子句

于 2016-11-26T09:50:54.003 回答