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

我有一个SQL Server 2008数据库,一个VARCHAR(MAX)FILESTREAM列。 我可以使用这个语法加载一条logging:

`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中打开它时,在开始时会出现大量的二进制乱码,而文本在那里时,所有的格式都不见了。

谢谢!

好问题 – 基本上你不能 – 你可以selectpath并直接从文件系统访问文件

但是从网上书籍你会注意到操作是

  • 更新
  • 询问
  • 备份

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

考虑到我为微软写了FILESTREAM白皮书,我感到有点不好意思,但我不知道答案。 我的感觉和UndertheFold一样 – 你做不到。 我有一个捅,看看我能find任何方式与SSIS做,但我不能。

正如UndertheFold所述,你不能。

但是,重要的是要认识到直接在文件系统中重命名或删除文件会损坏你的db( Source )。 我不知道如何编辑文件,但我个人不会冒这个风险。

你有没有尝试在SSIS中使用“导出列”任务?

在这里看一个详细的例子

出口专栏MS文件