如何在不使用 .NET 的情况下从 SQL Server 2008 FILESTREAM 字段中提取数据

如何在不使用 .NET 的情况下从 SQL Server 2008 FILESTREAM 字段中提取数据

我有一个 SQL Server 2008 数据库,带有 VARCHAR(MAX) FILESTREAM 列。我可以使用以下语法将记录加载到其中:

`INSERT INTO DocumentRepository(DocumentExtension, DocumentName, Document) 
 SELECT
 'doc' AS DocumentExtension
 , 'Hamlet.doc' AS DocumentName
 , * FROM OPENROWSET(BULK 'D:\Docs\Hamlet.doc', SINGLE_BLOB) 
   AS Document;`

这可以很好地加载我的 word 文档。我想知道的是如何使用 SQL Server 提供的工具将数据提取回磁盘。可能是 T-SQL、bcp 等,其实我并不关心,我只是想知道一种无需编写 .NET 应用程序即可完成此操作的方法。

我尝试使用 bcp,使用 -c、-n、-N 和 -w 开关,它可以提取文档,但格式不正确。当我在 Word 中打开它时,开头有很多二进制乱码,虽然有文本,但所有格式都消失了。

谢谢!

答案1

好问题 - 基本上你不能 - 你可以选择路径并直接从文件系统访问文件

但从在线图书你会注意到操作是

  • 插入
  • 更新
  • 询问
  • 备份

FILESTREAM 通过将 varbinary(max) 二进制大对象 (BLOB) 数据存储为文件系统上的文件,将 SQL Server 数据库引擎与 NTFS 文件系统集成。Transact-SQL 语句可以插入、更新、查询、搜索和备份 FILESTREAM 数据。Win32 文件系统接口提供对数据的流式访问。

答案2

鉴于我曾为 Microsoft 撰写过 FILESTREAM 白皮书,我承认这一点有点尴尬 - 但我不知道答案。我的感觉与 UndertheFold 相同 - 你做不到。我尝试过看看是否能找到使用 SSIS 实现这一点的方法,但我找不到。

答案3

正如 UndertheFold 所述,你不能。

然而,重要的是要意识到在文件系统中直接重命名或删除文件会损坏你的数据库(来源)。我不确定是否要编辑这些文件,但我个人不想冒这个险。

答案4

这里有一个应该可行的解决方案。我自己还没有测试过,但看起来有效。

http://www.connectsql.com/2010/12/ssis-filestream-data-export-and-import.html

相关内容