1
0
mirror of https://github.com/Stepa86/oScript-Examples.git synced 2026-06-18 17:25:16 +02:00

+Скрипт-обертка для SQLCMD

This commit is contained in:
Stepa86
2017-01-29 19:02:03 +03:00
parent f22dcab87f
commit 8908d1b3f0
+125
View File
@@ -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 Тогда
фЛог.Ошибка("Код возврата: " + КодВозврата);
фЛог.Информация(командаЗапуска.ПолучитьВывод());
КонецЕсли;
фЛог.Информация(командаЗапуска.ПолучитьВывод());
КонецПроцедуры
фЛог = Логирование.ПолучитьЛог(ИмяЛога());
//фЛог.УстановитьУровень(УровниЛога.Предупреждение);
//фЛог.УстановитьУровень(УровниЛога.Отладка);
ВыполнитьКоманду(АргументыКоманднойСтроки);