-- 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 |