我使用filetable。当我从SQL Server的FileTable中删除文件时,我希望从文件夹中删除这些文件,而当我从文件夹中删除文件时,应该将其从filetable中删除。
我还有第二个问题:在服务器上保存和读取文件(大于1MB的文件),filetable是不是更快的方式?
发布于 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。
发布于 2016-11-26 17:50:54
DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ]
table_name [ ,...n ]
[ ; ] 您可以使用以下代码删除文件table.if,您只想删除某些特定数据,在Tsql语句中使用where或having子句
发布于 2018-12-31 13:09:16
首先,您必须记住SQL Server中的文件表是您可以使用它的最佳方式,因为这是管理器引擎,用于帮助开发人员他们想要有管理文件的模式。该管理器使用物理位置保存文件,并创建表以保存文件的基本信息data.when您删除的文件,文件表管理器有多次运行的作业,它是删除的物理文件。
如果您想要立即删除物理文件,您可以使用此子句:
checkpoint;
EXEC sp_filestream_force_garbage_collection @dbname = N'[DB Name]'; 您必须记住,在delete row from file table with delay之后使用此子句,或者在SQL触发器中使用此子句(在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]';
ENDhttps://stackoverflow.com/questions/40816518
复制相似问题