Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
vasiliy.2007
Member

Откуда:
Сообщений: 1
Всем привет.
Пытаюсь скриптом делать бекап базы на горячею. С этим проблем нет.
Но так как база занимает около 150 Гб, то бекап потом хотелось бы запаковать в архив.
Для этого хотел использовать xp_cmdshell и передать в нем в качестве строки для выполнения путь с только что созданным бекапом.
Но не получается. Как я понимаю цмдшелл не может обрабатывать строку если ее клеить из переменных скрипта?
СКЛ 2005

Сам фрагмент кода на всякий случай.

--xp_cmdshell {'command_string'} [, no_output]

--@rarPath Путь к файлу rar.exe
--@Filename Имя файла выгрузки скуля .bak
--@rarKey Ключи для создания архива
--@rarFile Имя выходного файла *.rar
--DECLARE @rarPath as nvarchar(400)
--SET @rarPath = "C:\Program Files\WinRAR\rar.exe"
--DECLARE @rarKey as nvarchar(400)
--SET @rarKey = 'a -r -m5 -agyyyy.MM.dd_hh-mm'
--DECLARE @rarFile as nvarchar(400)
--SET @rarFile = '"E:\"'

--DECLARE @FullrarString as nvarchar(400)
--SET @FullrarString = @rarPath + @rarKey + @rarFile + @Filename

--xp_cmdshell '@FullrarString'
7 окт 19, 14:01    [21988243]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36456
Прежде чем изобретать свой велосипед, ознакомьтесь с уже изобретенными до вас велосипедами: https://www.sql.ru/forum/afsearch.aspx?s=?????????????&submit=?????&bid=1
7 окт 19, 14:10    [21988259]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29255
vasiliy.2007
Как я понимаю цмдшелл не может обрабатывать строку если ее клеить из переменных скрипта?
Может, какая её разница, как была заполнена переменная?
Вы просто передаёте в xp_cmdshell не переменную @FullrarString, содержащую строку, а строковую константу, содержащую '@FullrarString'. Кавычки уберите.
7 окт 19, 17:33    [21988604]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
DbDude
Member

Откуда:
Сообщений: 12
vasiliy.2007, а допустим динамический Sql в данном случае не вариант использовать?
9 окт 19, 11:34    [21990223]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 326
Не далее как в этом месяце делал подобное, и всё прекрасно клеится.
Единственное, что не получилось - это сделать за 1 вызов xp_cmdshell многострочный "батник" (несколько команд cmd - копирование, архивирование, удаление), а одну команду со многими параметрами - получилось.

P.S. Совет автору темы. Вместо
DECLARE @rarPath as nvarchar(400)
SET @rarPath = "C:\Program Files\WinRAR\rar.exe"


пишите стразу так
DECLARE @rarPath as varchar(8000) = '"C:\Program Files\WinRAR\rar.exe"'


Двойные кавычки командной строки должны быть заключены в одинарные кавычки SQL.
9 окт 19, 13:13    [21990332]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3074
AR®
DECLARE @rarPath as varchar(8000) = '"C:\Program Files\WinRAR\rar.exe"'
У него 2005, работать не будет.
9 окт 19, 14:37    [21990468]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли передать переменные из скрипта в xp_cmdshell?  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 326
Ennor Tiegael
У него 2005, работать не будет.


Но совет про использование кавычек остаётся в силе.
9 окт 19, 16:26    [21990648]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить