Триггер и ДТС(DTS). Как отвязаться от ошибок выполнения ?

chaos_al

Проблема такая: есть приложение, кот апдэйтит поле в строке. На апдэйт срабатывает триггер, кот вызывает ДТС для экспорта строки в другую базу.При ошибке в ДТС приложение реагирует на это, не может определить ошибку и валиться. Можно ли сделать так, чтобы триггер выполнялся независимо от запроса из приложения? Т.е. из приложения апдэйтится статус без проблем, а триггер уже работает сам по себе.
11 ответов

chaos_al

При ошибке в ДТС приложение реагирует на это, не может определить ошибку и валиться.Каким образом приложение реагирует на ошибку внешнего процесса, запущенного триггером ?


chaos_al

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


chaos_al

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


chaos_al

он реагирует на результаты внешнего процесса, а нужно, чтоб он ошибки не выдавал.Мне и нужно чтоб реагировал, только чтоб молча
Он - это триггер ? И как он реагирует ?И как вообще запускается DTS из триггера ?


chaos_al

CREATE TRIGGER eOrder ON dbo.order_dh INSTEAD OF UPDATE ASset nocount onBEGINdeclare @stat intif update(status) begin select @stat=status from inserted if @stat=1 BEGIN EXEC exportOrders END if @@ERROR >0 begin rollback transaction endENDENDDTS запускается в процедуре exportorders


chaos_al

DTS запускается в процедуре exportorders
И ?


chaos_al

CREATE PROCEDURE exportorders ASexec master..xp_cmdshell 'DTSRun /N "DKLinkExport" /F "D:\work\DTS\SES\ExportOrders.dts" /A "In":"8"="c:\Dklink.udl" /A "out":"8"="c:\ses.udl" /W "0" 'GO


chaos_al

CREATE PROCEDURE exportorders ASexec master..xp_cmdshell 'DTSRun /N "DKLinkExport" /F "D:\work\DTS\SES\ExportOrders.dts" /A "In":"8"="c:\Dklink.udl" /A "out":"8"="c:\ses.udl" /W "0" ', NO_OUTPUTGO


chaos_al

работает так :приложение< | | update... | | | триггер---->а я хочу:приложение<- | | update... ----> | триггер


chaos_al

работает так :
Ваши значки мне лично не понятны.- Триггер срабатывает всегда перед завершением активизировавшей его команды- Любая ошибка, сгенерированная сервером во ходе выполнения всегда передается клиенту- Решение о том, как реагировать на эту ошибку клиент принимает сам


chaos_al

В некотором смыслесамый надежный способ - это активирить dtsrun черезвнешний (например, vbs) скрипт:
On Error Resume Next
Dim oShell
Set oShell = WScript.CreateObject("WSCript.Shell")
oShell.Run "DTSRun ..."
Set oShell = Nothing
А сам этот скрипт вызвать через ту же процу exportorders:
CREATE PROCEDURE exportorders
AS
exec master..xp_cmdshell 'D:\my.vbs', NO_OUTPUT