我每天都会运行 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'