You've already forked oScript-Examples
mirror of
https://github.com/Stepa86/oScript-Examples.git
synced 2026-06-18 17:25:16 +02:00
+Скрипт-обертка для SQLCMD
This commit is contained in:
@@ -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 Тогда
|
||||
фЛог.Ошибка("Код возврата: " + КодВозврата);
|
||||
фЛог.Информация(командаЗапуска.ПолучитьВывод());
|
||||
КонецЕсли;
|
||||
|
||||
фЛог.Информация(командаЗапуска.ПолучитьВывод());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
фЛог = Логирование.ПолучитьЛог(ИмяЛога());
|
||||
//фЛог.УстановитьУровень(УровниЛога.Предупреждение);
|
||||
//фЛог.УстановитьУровень(УровниЛога.Отладка);
|
||||
ВыполнитьКоманду(АргументыКоманднойСтроки);
|
||||
Reference in New Issue
Block a user