ame*_*mak 2 sql-server blob filestream sql-server-2008
我怎么知道FILESTREAM我刚插入数据库的数据的物理位置(所以我可以在Windows资源管理器中看到它)?
有一个选项:方法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)
我知道这是一篇较旧的文章,但由于它在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)
首先,您需要了解 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)
我相信你也可以通过企业管理器通过其他方式获取该路径,但我暂时忘记了如何获取。
| 归档时间: |
|
| 查看次数: |
10214 次 |
| 最近记录: |