如何使用 BCP 或 Sql Server Management Studio 从 Sql Server 中获取 BLOB 数据?
Posted
技术标签:
【中文标题】如何使用 BCP 或 Sql Server Management Studio 从 Sql Server 中获取 BLOB 数据?【英文标题】:How do I use BCP or Sql Server Management Studio to get BLOB data out of Sql Server? 【发布时间】:2011-01-25 04:07:04 【问题描述】:很抱歉,如果这个问题已经被问过,但我在任何地方都找不到。我有一个将文件存储为 BLOBS 的表。保存文件的列是图像数据类型。我希望能够从列中提取二进制数据并将其转换为实际文件。如果可能的话,我希望能够通过 BCP 或管理工作室来做到这一点。
我尝试过 BCP,但由于某种原因,当我尝试提取 Office 文档时,Word 认为它已损坏。到目前为止,这是我尝试过的(显然这些值已经改变以保护无辜者:):
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -n -S server -U username -P password
这不起作用吗?有什么想法吗?
编辑原来你不需要 -n 本机标志。此外,默认情况下,BCP 尝试在图像列中包含 4 字节前缀 - 您实际上希望将其设置为 0。
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
输入字段 document_binary [image] 的文件存储类型:
输入字段 document_binary [4] 的前缀长度:0
输入字段 document_binary [0] 的长度:
输入字段终止符 [无]:
【问题讨论】:
【参考方案1】:我正在回答我自己的问题,因为我对 SO 告诉我设置赏金感到恼火
原来你不需要 -n 本机标志。此外,默认情况下,BCP 尝试在图像列中包含 4 字节前缀 - 您实际上希望将其设置为 0。
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
输入字段 document_binary [image] 的文件存储类型:
输入字段 document_binary [4] 的前缀长度:0
输入字段 document_binary [0] 的长度:
输入字段终止符 [无]:
【讨论】:
【参考方案2】:如果您可以使用 C#/.NET 代码来执行此操作,那么以下知识库文章可能会派上用场:
http://support.microsoft.com/kb/317016
显然,您可以使用 BCP 和格式文件执行类似的操作,但 IIRC 格式文件必须预先填充它期望从列中提取的确切字节数,这使得它非常不切实际。
您可以选择的另一个选项是在 2008 中使用 FILESTREAM,或者,如果您不打算很快迁移到 2008,请将文档存储在文件系统上,并将指向它们的指针存储在数据库中。是的,这有利有弊,但这是我们迄今为止在所有项目中选择的方式。
【讨论】:
我是 Aaron,实际上,我们 95% 的应用程序都将所有文档存储在文件系统上。虽然有一点仍然使用 blob :( 格式文件不需要预先填充字段长度;以下对我有用(9.0
和以下1
之后的换行符):9.0 1 1 SQLBINARY 0 0 "" 1 col1 ""
@aaron - 显然将 varbinary (max) 导出到文件存在很多问题。 (我刚刚用 c# 完成了它 - 在尝试用 BCP 完成 3 小时后)。 (问题在于 refix-length of field document_binary
应该设置为 0
- 但它需要用户交互。)也可以使用 FMT 文件完成。但是如果我无权访问 FMT 文件怎么办?有没有办法在 bcp 命令中“内联使用” fmt 内容?以上是关于如何使用 BCP 或 Sql Server Management Studio 从 Sql Server 中获取 BLOB 数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 bcp 将 blob 文件列表导入 SQL Server
SQL Server根据表或视图批量生成插入语句并BCP导出成文本