我怎么知道我刚插入数据库的FILESTREAM
数据的物理位置(我在Windows资源管理器中可以看到)?
答案 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
答案 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 )