Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запуск скрипта из триггера  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Добрый день

Столкнулся с необходимостью запускать по триггеру на таблице скрипт на втором сервере.
Идея благородная- пересобрать доккументы когда приходят новые данные, вот только база MS SQL а нужный вебсервер-Nginx PHP.

Одно из решений...
BEGIN
exec master..xp_cmdshell 'c:\progra~1\intern~1\iexplore.exe http://www.somesite.com/compile.php'
END


но вот что то оно меня смущает сильно, хотелось бы какую то более разумную альтернативу, например, не использовать iexplore, учитывая что оба сревера находяться в одной сети.

Поделитесь решениями если таковые есть.
10 окт 17, 08:59    [20856463]     Ответить | Цитировать Сообщить модератору
 Re: запуск скрипта из триггера  [new]
Massa52
Member

Откуда:
Сообщений: 379
Extremist,
А почему надо из под скуля запускать?
Может сделать доп - таблицу, например, DocJob.
И туда кидать данные - "Пришли новые данные"
А в "Планировщик задач" запускать задания каждые 5 мин... - это задание проверяет DocJob таблицу.
В этом случае задача разбивается на части - каждую из которых можно отрабатывать независимо.
10 окт 17, 09:11    [20856500]     Ответить | Цитировать Сообщить модератору
 Re: запуск скрипта из триггера  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Massa52,

по специфике необходимо что бы как можно быстрее после получения данных дока была собрана.
Конечно далеко не факт что её тут же прочитают, но, по закону подлости, сборка случилась, данные пришли, клиент прочитал устаревшую доку, через минут пересобралось. Итог- вопли что имея данные мы не предоставили их вовремя.

В принципе сейчас оно так и работает, только тригерит сборщика крон
10 окт 17, 09:17    [20856522]     Ответить | Цитировать Сообщить модератору
 Re: запуск скрипта из триггера  [new]
aleks222
Guest
Extremist
Massa52,

по специфике необходимо что бы как можно быстрее после получения данных дока была собрана.
Конечно далеко не факт что её тут же прочитают, но, по закону подлости, сборка случилась, данные пришли, клиент прочитал устаревшую доку, через минут пересобралось. Итог- вопли что имея данные мы не предоставили их вовремя.

В принципе сейчас оно так и работает, только тригерит сборщика крон

Ну, ежели так важно - сделай на PHP проверку (не надо ли пересобрать?) перед выдачей документа.
Ну а дальше по фкусу: либо пересобираешь на лету, либо вещаешь "ждите..."
10 окт 17, 12:04    [20857153]     Ответить | Цитировать Сообщить модератору
 Re: запуск скрипта из триггера  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
Extremist
Добрый день

Столкнулся с необходимостью запускать по триггеру на таблице скрипт на втором сервере.
Идея благородная- пересобрать доккументы когда приходят новые данные, вот только база MS SQL а нужный вебсервер-Nginx PHP.

Одно из решений...
BEGIN
exec master..xp_cmdshell 'c:\progra~1\intern~1\iexplore.exe http://www.somesite.com/compile.php'
END


но вот что то оно меня смущает сильно, хотелось бы какую то более разумную альтернативу, например, не использовать iexplore, учитывая что оба сревера находяться в одной сети.

Поделитесь решениями если таковые есть.


Запуск всякой внешней хрени из триггера - это за пределами добра и зла
Но, например:

Сделайте SQLCLR функцию, которая будет слать запрос httprequest с этим урл и вызывайте её
Типа такого

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using System.Net.Http;  
using System.Net.Http.Headers;   
  
namespace HttpClientAPP   
{      
    class Program    
    {  
        static void Main(string[] args)  
        {  
            HttpClient client = new HttpClient();  
            client.BaseAddress = new Uri("http://www.somesite.com/compile.php");   
            // Add an Accept header for JSON format.  
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));   
            // List all Names.  
            HttpResponseMessage response = client.GetAsync("api/Values").Result;  // Blocking call!  
            if (response.IsSuccessStatusCode)  
            {  
                var products = response.Content.ReadAsStringAsync().Result;   
            }  
            else  
            {  
                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);  
            }  
        }  
    }  
}  
10 окт 17, 13:14    [20857372]     Ответить | Цитировать Сообщить модератору
 Re: запуск скрипта из триггера  [new]
Massa52
Member

Откуда:
Сообщений: 379
Extremist,
Или так
https://msdn.microsoft.com/en-us/library/ms973816.aspx
10 окт 17, 14:07    [20857584]     Ответить | Цитировать Сообщить модератору
 Re: запуск скрипта из триггера  [new]
Extremist
Member

Откуда: Толком не помню, но помоему отуда же..
Сообщений: 509
Большое спасибо.
11 окт 17, 11:45    [20860073]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить