FILESTREAM数据的物理位置

ame*_*mak 2 sql-server blob filestream sql-server-2008

我怎么知道FILESTREAM我刚插入数据库的数据的物理位置(所以我可以在Windows资源管理器中看到它)?

Den*_*nik 8

有一个选项:方法PhysicalPathName().如果您现在使用的是SQL Server 2012或更高版本,则此代码适用于您:

SELECT stream.PhysicalPathName() AS 'Path' FROM Media
OPTION (QUERYTRACEON 5556)
Run Code Online (Sandbox Code Playgroud)

对于SQL Server 2008/2008 R2,您需要为整个实例启用跟踪标志5556:

DBCC TRACEON (5556, -1)
GO
Run Code Online (Sandbox Code Playgroud)

或者您正在调用PhysicalPathName()方法的特定连接:

DBCC TRACEON (5556, -1)
GO
Run Code Online (Sandbox Code Playgroud)


daz*_*ler 7

我知道这是一篇较旧的文章,但由于它在Google搜索排名中仍然排名较高,我想我会发布答案。当然,在更高版本的SQL中(我在2008年没有尝试过),您可以运行以下查询:

SELECT      t.name AS 'table',
            c.name AS 'column', 
            fg.name AS 'filegroup_name', 
            dbf.type_desc AS 'type_description',
            dbf.physical_name AS 'physical_location'
FROM        sys.filegroups fg
INNER JOIN  sys.database_files dbf
ON          fg.data_space_id = dbf.data_space_id
INNER JOIN  sys.tables t
ON          fg.data_space_id = t.filestream_data_space_id
INNER JOIN  sys.columns c
ON          t.object_id = c.object_id
AND         c.is_filestream = 1
Run Code Online (Sandbox Code Playgroud)

资源


Jag*_*agd 1

首先,您需要了解 FileStream 存储在托管 SQL Server 2008 数据库的服务器上。如果您有 DBA,请询问他们在哪里创建 FileStream。当然,您随后需要服务器的权限来导航它以查看目录。您也无法以任何方式操作这些文件,但您将能够看到它们。大多数 DBA 不会热衷于让您知道 FileStream 所在的位置。

但是,您可以通过其他几种方式获取该路径。我想到的一种方法是选择 FileStream 字段的 PathName()。假设FileStream启用的字段是ReportData,并且它所在的表是TblReports。以下 t-sql 语法将生成该位置的 UNC:

select top 1 ReportData.PathName(0)
from dbo.datReport
Run Code Online (Sandbox Code Playgroud)

我相信你也可以通过企业管理器通过其他方式获取该路径,但我暂时忘记了如何获取。