Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];

Вниз

Название целевой директории в формате DOS   Найти похожие ветки 

 
harisma ©   (2009-12-17 15:07) [0]

Возникла необходимость запуска одного из SQL скриптов через командную строку, используя OSQL (SQLCMD для SQL2005). Проблема в том, что сам OSQL принимает скрипт как параметр (в обрамлении двойных кавычек) и в скрипте также есть двойные кавычки, обрамляющие целевую директорию (которая содержит в себе пробел - потому и возникает необходимость в кавычках). Поэтому текст скрипта для OSQL получается обрезаным и соответственно скрипт не выполняется.
Если же целевую директорию представить в формате ДОС, то все в порядке - кавычки ставить не надо и скрипт корректно отрабатывает.

Так вот вопрос: как имея название директории с пробелами узнать, как она будет выглядеть в формате ДОС.

Для облегчения пнимания всего вышенаписанного представляю рабочий и нерабочий варианты командной строки:

Нерабочий:

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -E -S dev-3\SQL2005 -Q "EXECUTE master.dbo.xp_sqlmaint "-D 2008_empty -VrfyBackup -BkUpMedia DISK -BkUpDB "E:\Databases  Backup Folder" -BkExt BAK -WriteHistory""

Рабочий:

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -E -S dev-3\SQL2005 -Q "EXECUTE master.dbo.xp_sqlmaint "-D 2008_empty -VrfyBackup -BkUpMedia DISK -BkUpDB E:\Databa~1 -BkExt BAK -WriteHistory""

Примечание: советы типа "этот скрипт можно всунуть в сам SQL" не принимаются, поскольку данная задача планируется выполняться для SQL2008 ExpressEdition, у которого нет SQLServerAgent.


 
Германн ©   (2009-12-17 15:13) [1]

GetShortPathName не поможет?


 
Медвежонок Пятачок ©   (2009-12-17 15:15) [2]

а закавычить путь не помогает?
или просто папку бэкапов назвать попроще?


 
harisma ©   (2009-12-17 16:03) [3]

> или просто папку бэкапов назвать попроще?
Нельзя, потому как папку указывает пользователь, а не зашивается жестко разработчиком.

>а закавычить путь не помогает?
Что имеется ввиду? Двойные кавычки нельзя, одинарные - тот же эффект - скрипт не выполнится.


 
sniknik ©   (2009-12-17 22:27) [4]

> Двойные кавычки нельзя
почему это нельзя?

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -E -S dev-3\SQL2005 -Q "EXECUTE master.dbo.xp_sqlmaint "-D 2008_empty -VrfyBackup -BkUpMedia DISK -BkUpDB ""E:\Databases  Backup Folder"" -BkExt BAK -WriteHistory""

должно работать


 
harisma ©   (2009-12-21 13:53) [5]

[4] Спасибо за подсказку - так работает. Только почему такая конструкция не работает с программой OSQL.exe? Кто знает?


 
sniknik ©   (2009-12-21 14:36) [6]

> Кто знает?
ну, как бы, я догадываюсь... или тебе список знающих нужен?


 
harisma ©   (2009-12-21 15:00) [7]

To sniknik:
>ну, как бы, я догадываюсь...

Мне не список знающих нужен, а решение проблемы.
Что надо в строке параметров изменить, чтобы работало и с sqlcmd.exe и с osql.exe (так как sqlcmd - это расширенная версия osql, но появилась только в SQL 2005)?


 
sniknik ©   (2009-12-21 17:37) [8]

> Мне не список знающих нужен
а зачем тогда вопрос "кто знает?"?

> Что надо в строке параметров изменить
нужно понимать, что передаваемую строку последовательно преобразовывают... и в зависимости от программы это могут быть разные преобразования, программа "внешняя" получает от тебя "сырец" строки, преобразует и передаст дальше внутренней программе. внутренняя будет работать если после этих преобразований получат валидную со своей точки зрения строку...

типа ты пишешь в дельфи "111222111", суть строка без кавычек, но в дельфи ты ее ими обозначаешь. передав куда нибудь там будет строка 111222111, если тебе нужно чтобы та программа получила с кавычками то нужно их внести в строку """111222111""", вот, это в дельфи будет суть "111222111", и передастся тоже она, но если та программа передает дальше аналогичному парсеру (т.е. тоже обозначает строки кавычками) та получит 111222111... опять, а ждет чего то с обозначениями строк.
в общем возьми в руки бумажку, карандаш и посчитай, что на каком этапе получается и сравни с тем что там нужно.


 
harisma ©   (2009-12-21 17:46) [9]

Вот теперь спасибо за внятный обстоятельный и понятный ответ :)


 
Leonid Troyanovsky ©   (2009-12-21 19:21) [10]


> harisma ©   (21.12.09 17:46) [9]

> Вот теперь спасибо за внятный обстоятельный и понятный ответ
> :)

Осталось непонятным, что ж из всего этого было ранее непонятным.

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
11-1236071712
rvi
2009-03-03 12:15
2011.07.31
Запись в log


3-1261769117
Col2Row
2009-12-25 22:25
2011.07.31
Как запросом или процедурой получить столбец в виде строки?


15-1302247492
И. Павел
2011-04-08 11:24
2011.07.31
Как узнать, какие Band-ы напечатались?


3-1262005058
Вадим Хижинский
2009-12-28 15:57
2011.07.31
Изменения SQL запроса в FastReport


15-1302640197
Юрий
2011-04-13 00:29
2011.07.31
С днем рождения ! 13 апреля 2011 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский