Jon*_*nas 14 sql-server migration export datafile blob
我将从数据库迁移。image
我想将一列类型导出到文件系统上的二进制文件。每条记录一个文件。如何使用 SQL Server 执行此操作?
Jon*_*nas 14
这是我想出的解决方案:
启用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)如果需要,创建一个目录xp_cmdshell
以获得所需的权限。
EXEC master..xp_cmdshell 'mkdir C:\exportdir'
Run Code Online (Sandbox Code Playgroud)将 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'
这导出了我的文件,没有任何额外的字符。