Запуск 7-Zip из сценария SQL
-
02-10-2019 - |
Вопрос
Можно ли позвонить в 7-Zip из сценария SQL? По сути, я извлекаю таблицы в CSV, а затем упаковываю их в файлы 7Z. Я установил 7-Zip на машине, где установлен SQL Server и добавил его в путь, но этого недостаточно.
Я получаю следующую ошибку, когда пытаюсь запустить скрипт с помощью 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
Решение
Возможно, да, но, вероятно, плохая идея: разрешения часто являются проблемой (как вы узнали), пути и рабочие каталоги будут сбить вас с толку, а строительство команд оболочки в SQL - это боль вокруг. Было бы намного проще использовать внешний сценарий и запустить его из запланированного работы или пакета SSIS.
Если вы уточняете, почему и когда вы хотите запустить сценарий из SQL, кто -то может предложить лучший подход. Например, я делаю то же самое, используя SSIS и Python.
Другие советы
Я не знаю, будет ли это полезно сейчас, но я наткнулся на эту проблему и решил его, позвонив в приложение 7Z с именем файла.
Итак, вместо:
set @archiveCommand = '7z a '+@filename+'.7z '+@filename+' '
Вы хотели бы:
set @archiveCommand = '"C:\Program Files\7-zip\7z" a '+@filename+'.7z '+@filename+' '