Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Microsoft SQL SERVER

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

sqsqsq

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
-- 1 --
    CREATE TRIGGER [dbo].trg_event
    ON[dbo].[Commands]
    AFTER  INSERT
 
    [NOT FOR REPLICATION]
    AS
 
BEGIN
-- 2 --
    -- узнаем IP адрес устройства и сохраняем в @device_ip
     DECLARE @device_ip nvarchar(50)
    SELECT @device_ip = Hostname FROM [TestDB].[dbo].[Sources]
      WHERE ID =
      (
          SELECT SourceId FROM [TestDB].[dbo].[Channels]
          WHERE TAG =
          (
              SELECT TOP(1) PARAM2
              FROM inserted
          )
      )
 
-- 3 --
    -- можно было бы создавать задание для агента динамически, но пока что просто вызываю существующий джоб, имя которого совпадает с IP адресом датчика.
    -- Этот джоб запускает задание планировщика виндовс
    -- а планировщик виндовс в свою очередь запускает EXE файл (созданный в AvtoIt), который открывает IE в текущей десктоп сессии, нажимает на кнопки, браузера, скачивает файл отчета и закрывает IE.
    DECLARE @sqlCommand nvarchar (max)
    SET @sqlCommand = N'EXEC msdb.dbo.sp_start_job @job_name'
    EXECUTE sp_executesql @sqlCommand, N'@job_name nvarchar(250)', @job_name = @device_ip
    -- пытался сделать то же самое через xp_cmdshell, но он во-первых, требует дополнительных разрешений, а во-вторых, запускает нажималку кнопок IE в системной десктопной сессии, в которой она не работает
    -- так и не понял, как контролировать, в какой десктоп сессии xp_cmdshell запустит файл на исполнение
 
    -- ждем пока отчет будет готов (пока без проверки)
    WAITFOR DELAY '00:03:00';
 
     -- считываем полное имя последнего отчета из лога (пришлось создать файл формата импорта)
     DECLARE @ReportPathLast nvarchar(max)
     select @ReportPathLast =   (SELECT TOP(1) * FROM OPENROWSET(BULK N'C:\test\log.txt', FORMATFILE = 'C:\test\ImportFormat.txt') AS Path Order by filename desc)
 
-- 4 --
      -- команда для отправки почты
    SET @sqlCommand = N'EXEC msdb.dbo.sp_send_dbmail
                  @profile_name =  @profile_name,
             @file_attachments = @file_attachments,
             @recipients = @recipients,
             @subject = "Отчет ' +@device_ip +'",
             @body = "В приложении отчет с датчика ' + @device_ip + '.'
             --+ char(13)+char(10) + 'Filename ' + @ReportPathLast -- С этой строчкой ругается на слишком длинную команду
             + '";'
 
    -- запускаем отправку почты
    EXECUTE sp_executesql @sqlCommand,
        N'@device_ip nvarchar(250), @profile_name nvarchar(250), @recipients nvarchar(250), @file_attachments nvarchar(250)',
         @device_ip = @device_ip,
         @profile_name = N'MailProfileName',
         @recipients = N'email1@domain.ru',
         @file_attachments = @ReportPathLast
 
END
 

Всего записей: 41 | Зарегистр. 06-07-2005 | Отправлено: 14:17 24-06-2019
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Microsoft SQL SERVER


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru