我在sp中使用xp_CmdShell将图像写入C:\ ImageUpload这样的位置。这在托管SQL Server的服务器位置上工作得非常好。我知道这可能是典型的行为。
然而,我的一个客户是拥有自己的托管数据库的服务器。他需要在另一个服务器位置写入图像。
以下是我的SQL sp的一部分。它通常工作正常,但在上面的情况下,我想将图像写入另一个服务器位置。
SET @strOutputFilePath = C:/ImageUpload
-- Get Final Path
SET @strOutputFilePath = @strOutputFilePath + @strFilename
PRINT @strOutputFilePath -- path will be like C:\ImageUpload\NameofFile
SET @strSql = 'BCP "set fmtonly off SELECT BlobImage FROM dbo.TblImage where ID = ' + CAST(@id AS VARCHAR(10)) +''
+ '" QUERYOUT ' + '"' +@strOutputFilePath+ '"' + ' -T -f C:\Test\testblob.fmt -S"' + @@SERVERNAME + '"'
PRINT @strSql
EXEC @RC = master.dbo.xp_CmdShell @strSql
PRINT @RC
如何指定特定的服务器位置,以便可以将图像写入该文件夹而不是托管SQL Server的文件夹?
答案 0 :(得分:0)
你需要做一些事情。
更新服务器以使用UNC路径。所以对位置的引用 应该读取\\ ServerName \ FileShare \ File.txt而不是 驱动:\目录\ FILE.TXT
如果SQL Server安装正确且安全,则该帐户
xp_cmdshell使用可能没有权限。所以要么允许
服务帐户对共享文件夹的权限OR(更多
安全方法)为xp_cmdshell设置PROXY
帐户。您可以通过发出命令whoami