Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server FILESTREAM数据的物理位置_Sql Server_Sql Server 2008_Blob_Filestream - Fatal编程技术网

Sql server FILESTREAM数据的物理位置

Sql server FILESTREAM数据的物理位置,sql-server,sql-server-2008,blob,filestream,Sql Server,Sql Server 2008,Blob,Filestream,我如何知道刚刚插入数据库的文件流数据的物理位置(以便在Windows资源管理器中看到它)路径?首先,您需要了解文件流存储在承载SQL server 2008数据库的服务器上。如果您有DBA,请询问他们在文件流中创建它的位置。当然,您还需要拥有服务器的权限,才能在服务器上导航以查看目录。您也将无法以任何方式操纵文件,但您将能够看到它们。大多数DBA都不想让您知道文件流的位置 但是,您可以通过其他几种方法找到路径。想到的一种方法是在FileStream字段的PathName()上进行选择。假设启用F

我如何知道刚刚插入数据库的
文件流
数据的物理位置(以便在Windows资源管理器中看到它)路径?

首先,您需要了解文件流存储在承载SQL server 2008数据库的服务器上。如果您有DBA,请询问他们在文件流中创建它的位置。当然,您还需要拥有服务器的权限,才能在服务器上导航以查看目录。您也将无法以任何方式操纵文件,但您将能够看到它们。大多数DBA都不想让您知道文件流的位置

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

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

我相信您也可以通过enterprise manager通过其他方式找到路径,但我现在忘记了如何找到路径。

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


FILESTREAM文件名实际上是创建文件时数据库事务日志中的日志序列号。Paul Randal已经解释过了。因此,一种选择是找出日志序列号,并在文件流数据容器中查找以该序列号命名的文件。

我知道这是一篇较老的帖子,但由于它在谷歌搜索排名中仍然排名靠前,我想我应该发布一个答案。当然,在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

此方法有一个选项: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()方法的特定连接:

--文件流文件路径

SELECT col.PathName() AS path FROM tbl

你为什么需要这个?不建议将filestream文件作为常规文件访问。默认情况下,您甚至无权访问这些文件。这就像询问在mdf文件中的何处可以找到刚刚插入到数据库表中的值。直接(而不是通过提供的API)篡改filestream文件是损坏数据库的一种简单方法。
SELECT col.PathName() AS path FROM tbl