From 8908d1b3f0114f3933ff06fcfa93580c362448db Mon Sep 17 00:00:00 2001 From: Stepa86 Date: Sun, 29 Jan 2017 19:02:03 +0300 Subject: [PATCH] =?UTF-8?q?+=D0=A1=D0=BA=D1=80=D0=B8=D0=BF=D1=82-=D0=BE?= =?UTF-8?q?=D0=B1=D0=B5=D1=80=D1=82=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20SQL?= =?UTF-8?q?CMD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ExecQuery_SQLCMD.os | 125 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 src/ExecQuery_SQLCMD.os diff --git a/src/ExecQuery_SQLCMD.os b/src/ExecQuery_SQLCMD.os new file mode 100644 index 0000000..4ee68e0 --- /dev/null +++ b/src/ExecQuery_SQLCMD.os @@ -0,0 +1,125 @@ +#Использовать cmdline +#Использовать 1commands +#Использовать logos + +Перем фЛог; + +// Получить имя лога продукта +// +// Возвращаемое значение: +// Строка - имя лога продукта +// +Функция ИмяЛога() Экспорт + Возврат "oscript.app.ExecQuery_SQLCMD"; +КонецФункции + +Функция ПолучитьТекстИзФайла( Знач пИмяФайла ) + + файлОбмена = Новый Файл(пИмяФайла); + Данные = ""; + Если файлОбмена.Существует() Тогда + чтениеТекста = Новый ЧтениеТекста(пИмяФайла, КодировкаТекста.UTF8); + данные = чтениеТекста.Прочитать(); + чтениеТекста.Закрыть(); + Иначе + Возврат Ложь; + КонецЕсли; + возврат данные; +КонецФункции + +Функция ПолучитьПараметрыИзКоманднойСтроки( Знач пАргументы ) + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + + Парсер.ДобавитьПараметр("Команда"); + + Парсер.ДобавитьПараметр("Сервер"); + Парсер.ДобавитьПараметр("Пользователь"); + Парсер.ДобавитьПараметр("Пароль"); + Парсер.ДобавитьПараметр("ИмяБазы"); + Парсер.ДобавитьПараметр("ПутьКФайлу"); + + Параметры = Парсер.Разобрать(пАргументы); + + Если Не Параметры.Количество() = 6 Тогда + + Сообщить("Должно быть команда и 5 параметров."); + Сообщить( " backup Сервер Пользователь Пароль ИмяБазы ПутьКФайлуБекапа"); + Сообщить( " execQuery Сервер Пользователь Пароль ИмяБазы ПутьКФайлуСкрипта"); + + ЗавершитьРаботу(1); + + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +Функция ПолучитьПараметрСТекстомЗапроса( Знач пПараметры ) + + Если ВРег( пПараметры["Команда"]) = ВРег("backup") Тогда + + шаблонЗапросБекапа = "BACKUP DATABASE [%1] TO DISK = N'%2' WITH NOFORMAT, INIT, NAME = N'%1 FULL Backup', SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10"; + текстЗапроса = СтрШаблон( шаблонЗапросБекапа, пПараметры["ИмяБазы"], пПараметры["ПутьКФайлу"]); + + параметрСТекстомЗапроса = "-Q""" + текстЗапроса + """"; + + ИначеЕсли ВРег( пПараметры["Команда"]) = ВРег("execQuery") Тогда + + текстЗапроса = ПолучитьТекстИзФайла( пПараметры["ПутьКФайлу"] ); + + Если текстЗапроса = Ложь Тогда + фЛог.Ошибка( "Не удалось прочитать текст запроса из " + пПараметры["ПутьКФайлу"] ); + ЗавершитьРаботу(1); + КонецЕсли; + + параметрСТекстомЗапроса = "-i """ + пПараметры["ПутьКФайлу"] + """"; + + Иначе + + фЛог.Ошибка( "Неизвестная команда " + пПараметры["Команда"] ); + фЛог.Ошибка( "Поддерживаются только команды backup и execQuery" ); + ЗавершитьРаботу(1) + + КонецЕсли; + + Возврат параметрСТекстомЗапроса; + +КонецФункции // ПолучитьТекстЗапроса( Знач пКоманда ) + +Процедура ВыполнитьКоманду(Знач пАргументы) + + параметры = ПолучитьПараметрыИзКоманднойСтроки( пАргументы ); + + командаЗапуска = Новый Команда; + + Если фЛог.Уровень() = УровниЛога.Отладка Тогда + + логКомандыЗапуска = Логирование.ПолучитьЛог(командаЗапуска.ИмяЛога()); + логКомандыЗапуска.УстановитьУровень(УровниЛога.Отладка); + + КонецЕсли; + + командаЗапуска.УстановитьКоманду("sqlcmd"); + командаЗапуска.ДобавитьПараметр("-S" + параметры["Сервер"]); + командаЗапуска.ДобавитьПараметр("-U" + параметры["Пользователь"]); + командаЗапуска.ДобавитьПараметр("-P" + параметры["Пароль"]); + командаЗапуска.ДобавитьПараметр( ПолучитьПараметрСТекстомЗапроса( параметры ) ); + + командаЗапуска.УстановитьИсполнениеЧерезКомандыСистемы( Ложь ); + + кодВозврата = командаЗапуска.Исполнить(); + + Если Не КодВозврата = 0 Тогда + фЛог.Ошибка("Код возврата: " + КодВозврата); + фЛог.Информация(командаЗапуска.ПолучитьВывод()); + КонецЕсли; + + фЛог.Информация(командаЗапуска.ПолучитьВывод()); + +КонецПроцедуры + +фЛог = Логирование.ПолучитьЛог(ИмяЛога()); +//фЛог.УстановитьУровень(УровниЛога.Предупреждение); +//фЛог.УстановитьУровень(УровниЛога.Отладка); +ВыполнитьКоманду(АргументыКоманднойСтроки); \ No newline at end of file