FILESTREAM数据的物理位置

时间:2010-02-02 09:40:15

标签: sql-server sql-server-2008 blob filestream

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

5 个答案:

答案 0 :(得分:7)

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

SELECT stream.PhysicalPathName() AS 'Path' FROM Media
OPTION (QUERYTRACEON 5556)

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

DBCC TRACEON (5556, -1)
GO

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

DBCC TRACEON (5556, -1)
GO

答案 1 :(得分:6)

我知道这是一篇较老的帖子,但由于它在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

Source

答案 2 :(得分:3)

正如Pawel所提到的,使用Windows资源管理器访问FILESTREAM文件并不是一个好主意。如果您仍然决心继续探索此问题,以下提示可能有所帮助。

FILESTREAM文件名实际上是创建文件时数据库事务日志中的日志序列号。保罗兰达尔在this post解释了这一点。因此,一个选项是查找日志序列号,并在文件流数据容器中查找以此命名的文件。

答案 3 :(得分:0)

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

但是,您可以通过其他一些方式进入这条路。想到的一种方法是选择FileStream字段的PathName()。假设FileStream enabled字段是ReportData,它所在的表是TblReports。以下t-sql语法将产生一个UNC到该位置:

select top 1 ReportData.PathName(0)
from dbo.datReport

我相信你也可以通过其他方式通过企业经理走上这条道路,但我现在忘记了如何。

答案 4 :(得分:0)

- 文件流文件路径

.reduce(0, (x,y) -> x+y )