【问题标题】:How do I use BCP or Sql Server Management Studio to get BLOB data out of Sql Server?如何使用 BCP 或 Sql Server Management Studio 从 Sql Server 中获取 BLOB 数据?
【发布时间】: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] 的长度: 输入字段终止符 [无]:

【问题讨论】:

    标签: sql-server sql-server-2005 tsql blob bcp


    【解决方案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 内容?
      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2020-10-02
      • 1970-01-01
      • 2012-04-22
      相关资源
      最近更新 更多