Как запустить скрипт на каждой вставке - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть сценарий (пакет) и таблица в базе данных (Microsoft SQL Server).Мне нужно, чтобы они работали вместе.

Скрипт собирает данные из базы данных и использует его для вызова внешней программы, которая печатает метки с данными, собранными из таблицы, и внешней программой в pdf.

При каждой вставке в таблицу я хочу, чтобы скрипт выполнялся с использованием одного из полей вставки в качестве параметра.

Пример:

INSERT INTO table1
  VALUES (value1, value2, value3);

Итак, я хочу, чтобы скрипт выполнялсякак: Script.bat value1

Мне сказали, что триггеры - не лучший вариант, потому что если во время триггера возникнет какая-либо ошибка, вставка не будет выполнена.

Надеюсь, вы мне поможете!

1 Ответ

0 голосов
/ 28 сентября 2018

На самом деле не рекомендуется выполнять внешние сценарии в триггере, но вы можете тестировать и оценивать результаты на сервере разработки

Вот пример Триггер SQL код

create trigger tgSample on FolderTable after Insert
as
begin

declare @name varchar(100)

DECLARE newdata_cursor CURSOR FAST_FORWARD FOR 
select foldername from inserted

OPEN newdata_cursor

FETCH NEXT FROM newdata_cursor INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN

    DECLARE @cmd VARCHAR(1000)
    SET @cmd = 'c:\desktop\example.bat' + ' ' + @name
    EXEC master..xp_cmdshell @cmd

    FETCH NEXT FROM newdata_cursor INTO @name
END

CLOSE newdata_cursor
DEALLOCATE newdata_cursor

end

Обратите внимание, что я передаю параметр в пакетный скрипт внутри кода.

Одно важное замечание, касающееся триггеров, триггеры работают на основе набора, поэтому будьте готовы к выполнению триггера дляболее одного ряда.Таким образом, предполагая, что вы можете вставить, например, 10 строк в таблицу, я создал курсор SQL и выполнил пакетный скрипт один за другим.Если это возможно, то, согласно вашему пакетному файлу, вы можете объединить все полученные данные и передать их один раз в пакетную команду без курсора

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...