通过 Samba 共享文件夹使用 BCP 从 MSSQL 导出

通过 Samba 共享文件夹使用 BCP 从 MSSQL 导出

我每天都会运行 SQL 数据库并使用 BCP 导出一些数据。我需要将这些文件移动到 Linux 机器上,因此我使用 Samba 共享了该文件夹。

本地导出很好用但是当我尝试直接导出到 Linux 时它会触发错误。

如果我尝试手动复制文件没有错误我可以毫无问题地做到这一点。

SQL 查询正在 SQL Server Management Studio 下运行

DECLARE @sql VARCHAR(1000)
set @sql = 'BCP "SELECT rawdata FROM database.dbo.file where [id] = 123" queryout "Z:\files\123.jpg" -S SERVER\SQLINST -T -f D:\file.fmt'
EXEC xp_cmdshell @sql

错误是:

SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Unable to open BCP host data-file
NULL

Samba 配置如下所示:

[doc_sync]
path = /var/www/html
valid users = filesync
read only = no
writeable = yes
browseable = yes
public = yes
guest ok = yes

该文件夹的文件权限为 777。此外,我在 Windows(文件同步)中创建了一个本地用户,该用户在 Linux 机器上进行了镜像,因此用户不会出现任何问题。

我也尝试过看看xp_cmdshell命令并尝试了这个

EXEC xp_cmdshell 'MKDIR "Z:\Data\"'

其中 Z: 是 Samba 安装的驱动器,错误是:

output
The system cannot find the drive specified.

答案1

XP_CMDSHELL 无法使用系统中已安装的驱动器号,因此需要将其导出以进行 SQL 查询,如下所示

EXEC XP_CMDSHELL 'net use Z: \\SRV\files /USER:username pass'

相关内容