首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server FileTable :删除文件

SQL Server FileTable :删除文件
EN

Stack Overflow用户
提问于 2016-11-26 16:38:37
回答 3查看 2.1K关注 0票数 1

我使用filetable。当我从SQL Server的FileTable中删除文件时,我希望从文件夹中删除这些文件,而当我从文件夹中删除文件时,应该将其从filetable中删除。

我还有第二个问题:在服务器上保存和读取文件(大于1MB的文件),filetable是不是更快的方式?

EN

回答 3

Stack Overflow用户

发布于 2016-11-26 20:08:58

对于第一个问题,应该在删除相对行(DELETE FROM ...)并提交后立即删除文件。这同样适用于相反的情况(如果你删除了一个文件,相对行应该会消失)。

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

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

不过,与T-SQL访问相比,这完全取决于所存储的blob的大小。简而言之,如果您的blobs小于1MB,那么使用T-SQL应该会更快。有关更详细的数据,请参阅此处:Best Practices on FILESTREAM implementations

票数 3
EN

Stack Overflow用户

发布于 2016-11-26 17:50:54

代码语言:javascript
复制
DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ]  
table_name [ ,...n ]  
[ ; ]  

您可以使用以下代码删除文件table.if,您只想删除某些特定数据,在Tsql语句中使用where或having子句

票数 0
EN

Stack Overflow用户

发布于 2018-12-31 13:09:16

首先,您必须记住SQL Server中的文件表是您可以使用它的最佳方式,因为这是管理器引擎,用于帮助开发人员他们想要有管理文件的模式。该管理器使用物理位置保存文件,并创建表以保存文件的基本信息data.when您删除的文件,文件表管理器有多次运行的作业,它是删除的物理文件。

如果您想要立即删除物理文件,您可以使用此子句:

代码语言:javascript
复制
 checkpoint;
 EXEC sp_filestream_force_garbage_collection @dbname = N'[DB Name]';    

您必须记住,在delete row from file table with delay之后使用此子句,或者在SQL触发器中使用此子句(在delete之后):

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40816518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档