如何将图像列导出到 SQL Server 中的文件?

Jon*_*nas 14 sql-server migration export datafile blob

我将从数据库迁移。image我想将一列类型导出到文件系统上的二进制文件。每条记录一个文件。如何使用 SQL Server 执行此操作?

Jon*_*nas 14

这是我想出的解决方案:

  1. 启用xp_cmdshell

    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    RECONFIGURE
    GO
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果需要,创建一个目录xp_cmdshell以获得所需的权限。

    EXEC master..xp_cmdshell 'mkdir C:\exportdir'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将 BCP 与 queryout 结合使用

    EXEC master..xp_cmdshell 'BCP "SELECT column_of_type_image FROM **your_db WHERE id = 1 " queryout "C:\exportdir\yourfile.pdf" -T -N'
    
    Run Code Online (Sandbox Code Playgroud)

**your_db 必须是完全限定的表名,即 [Yourdb].[YourSchema].[YourTable]


小智 10

我也遇到了同样的问题,将额外的 4 个字节添加到我所有文件的开头。我没有在 bcp 命令中使用 -N 选项,而是将其更改为 -C RAW。执行此操作时,bcp 将提示以下问题:

输入字段 FileData [图像] 的文件存储类型:
输入字段 FileData [4] 的前缀长度:
输入字段 FileData [0] 的长度:
输入字段终止符 [无]: 
您想将此格式信息保存在文件中吗?[是/否]

为了解决这个问题,我在我的 sql server 的根目录上创建了一个文本文件 (i.txt),其中包含以下几行来回答每个问题:

一世
0
0

n

然后,我的 EXEC bcp 行变成了:

EXEC master..xp_cmdshell 'BCP "SELECT column_of_type_image FROM **your_db WHERE id = 1 " queryout "C:\exportdir\yourfile.pdf" -T -C RAW<C:\i.txt'

这导出了我的文件,没有任何额外的字符。