【问题标题】:running 7-zip from a SQL script从 SQL 脚本运行 7-zip
【发布时间】:2018-09-09 04:49:02
【问题描述】:

是否可以从 SQL 脚本调用 7-zip?基本上我将表格提取到 csv,然后将它们打包成 7z 文件。我已经在安装 SQL Server 的机器上安装了 7-zip 并将其添加到路径中,但这似乎还不够。

当我尝试使用 xp_cmdshell 运行脚本时出现以下错误

'7z' is not recognized as an internal or external command,
operable program or batch file.

这是代码,我已经声明了变量

declare @archiveCommand nvarchar(max)
declare @filename nvarchar(max)

set @archiveCommand = '7z a '+@filename+'.7z '+@filename+' '
print @archiveCommand
EXEC master..xp_cmdshell @archiveCommand

【问题讨论】:

  • added it to the path你在哪里添加的路径?
  • 您确定 7z 位于运行 SQL Server 的用户用户帐户的路径中吗?
  • 更改 PATH 后是否重新启动服务器?
  • 您从脚本内部调用“exec”,对吗?请张贴代码。
  • 为什么 cmets 中有这么多答案?

标签: sql sql-server 7zip


【解决方案1】:

我现在不知道这是否会有所帮助,但我遇到了这个问题并通过使用文件名调用 7z 应用程序来解决它。

所以代替:

set @archiveCommand = '7z a '+@filename+'.7z '+@filename+' '

你会想要:

set @archiveCommand = '"C:\Program Files\7-zip\7z" a '+@filename+'.7z '+@filename+' '

【讨论】:

  • +1 是的,非常有帮助的欢呼。有时明显的东西会逃避捕获(那是偷偷摸摸的明显)。
  • 这是解决方案 - 无需设置路径等。太棒了。
【解决方案2】:

这是可能的,是的,但可能是个坏主意:权限通常是一个问题(正如您已经发现的那样),路径和工作目录会让您感到困惑,并且在 SQL 中构建 shell 命令是一个全面的痛苦。仅使用外部脚本并从计划的作业或 SSIS 包中运行它会容易得多。

如果您明确说明为什么以及何时要从 SQL 运行脚本,那么有人可能会提出更好的方法。例如,我使用 SSIS 和 Python 做同样的事情。

【讨论】:

  • 我只是想自动化一个过程,所以我不必为我正在处理的每个表手动运行命令。路径问题对我来说并不是什么大问题,我可以使用绝对路径并避免这种情况。我可能可以通过外部脚本做到这一点,但能够在 sql server 中做到这一点会很好而且令人印象深刻。我只会不经常运行这个,所以这没什么大不了的。如果没有大的烦恼就无法完成,那么别担心,我会手动完成。
  • 我不确定为什么外部脚本是“手动”的?该脚本可以查询表列表,为每个表构建和执行 bcp.exe 命令,然后对 7z.exe 执行相同的操作。然后你只需要维护表格列表。我个人的经验是,在 SQL 中处理文件和文件系统是一件非常痛苦的事情,不值得费心,但显然你的环境可能会有所不同。
  • 对不起,我的意思是手动,因为没有脚本。我认为如果在 sql server 中不可能/容易,那么我将手动进行,这就是我目前正在做的事情。我在让 sql server 识别 7z.exe 时遇到问题,它一直说它看不到它,即使我已经重新启动它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2013-05-19
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
相关资源
最近更新 更多