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

Откуда: Москва
Сообщений: 93
Добрый день!
по неясной причине не срабатывает триггер instead of insert
ALTER trigger [dbo].[TRF_Insert] 
	ON [dbo].[OutgoingMessages] 
	INSTEAD OF INSERT AS
	
BEGIN 
	insert into dbo.OutgoingMessages 
	(
		  PackageNo
		  , ServiceName
		  , DestServiceName
		  , DestServerName
		  , DestPort
		  , ConnectString
		  , Status
		  , TryCount
		  , PasswordFld
		  , TimestampFld
		  , RemotePkg
		  , ErrorNo
		  , ServerMsg
		  , FinishedDateTime
		  , JobID
		  , CounterFld
		  , Forwarder
		  , MessageGUID
		  , CancelledByUser
	)
	select 
		  PackageNo
		  , ServiceName
		  , DestServiceName
		  , DestServerName
		  , DestPort
		  , ConnectString
		  , Status
		  , TryCount
		  , PasswordFld
		  , TimestampFld
		  , RemotePkg
		  , ErrorNo
		  , ServerMsg
		  , i.FinishedDateTime
		  , JobID
		  , CounterFld
		  , case
				when Forwarder like 'MSK%' 
					then 'FORW_A01_01' 
					else 
						Case when Forwarder like 'len%'
							 then 'FORW_A01_02'
							 else 'FORW_A01_03'
					    end
			end  
		  , MessageGUID
		  , CancelledByUser
	from inserted i
END 


Вот, что вставлено в таблице (2 строки неверно, одна верно):

К сообщению приложен файл. Размер - 6Kb
3 фев 16, 11:55    [18766146]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Glory
Member

Откуда:
Сообщений: 104760
gerogekochkin
по неясной причине не срабатывает триггер instead of insert

Откуда вы узнали, что триггер именно не срабатывает ?
Вы как-то мониторили ходд выполнения ?
3 фев 16, 11:58    [18766166]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
gerogekochkin
по неясной причине не срабатывает триггер instead of insert
У вас М или К русские. Либо в данных, либо в коде триггера.
Или триггер вообще был отключен.
3 фев 16, 12:03    [18766214]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
gerogekochkin
Member

Откуда: Москва
Сообщений: 93
Glory, прошу прощения, в том, что именно тригер не срабатывает, 100% уверенности нет. В каких-то строках все нормально, в некоторых вставляются первоначальные данные. Нет понимания, какая еще может быть причина
3 фев 16, 12:03    [18766218]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Glory
Member

Откуда:
Сообщений: 104760
gerogekochkin
В каких-то строках все нормально, в некоторых вставляются первоначальные данные.

И как при несработавшем триггере вообще в таблице смогли появиться записи ?
3 фев 16, 12:05    [18766231]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
gerogekochkin
Вот, что вставлено в таблице (2 строки неверно, одна верно):

мог быть тупо пробел в начале строки или еще какой нибудь символ перед вашим MSK
3 фев 16, 12:06    [18766241]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
gerogekochkin
Member

Откуда: Москва
Сообщений: 93
Maxx, ну в таком случае должно быть вставлено "FORW_A01_03", верно?
3 фев 16, 12:08    [18766253]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
gerogekochkin
Member

Откуда: Москва
Сообщений: 93
Glory, например, триггер просто не отработал и вставились превоначальные данные!?
3 фев 16, 12:11    [18766286]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Glory
Member

Откуда:
Сообщений: 104760
gerogekochkin
Glory, например, триггер просто не отработал и вставились превоначальные данные!?

Триггер _не выполняется_ в считанных случаях. И все эти случаи документированы.
3 фев 16, 12:15    [18766340]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
gerogekochkin
Glory, например, триггер просто не отработал и вставились превоначальные данные!?
Такое невозможно.
[dbo].[OutgoingMessages] - это таблица или представление?
CASE можно написать проще:
CASE
 WHEN Forwarder LIKE 'MSK%' THEN 'FORW_A01_01' 
 WHEN Forwarder LIKE 'len%' THEN 'FORW_A01_02' 
                            ELSE 'FORW_A01_03' 
END
это мелочи, конечно.
3 фев 16, 12:20    [18766378]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
gerogekochkin,

а другие триггеры у [dbo].[OutgoingMessages] есть (если это таблица)?
3 фев 16, 12:21    [18766382]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
gerogekochkin
Member

Откуда: Москва
Сообщений: 93
iap,
это таблица.
Есть еще один триггер:
ALTER TRIGGER [dbo].[TRG_AFTER_Update] 
	on [dbo].[OutgoingMessages] 
   AFTER UPDATE
AS 
BEGIN
	BEGIN 
		update [dbo].[OutgoingMessages] 
		set Status =11, Awaiting = 1
		from [dbo].[OutgoingMessages] o
		join inserted i on i.PackageNo = o.PackageNo and i.ServiceName = o.ServiceName and i.ConnectString = o.ConnectString
		where i.Awaiting is null and i.Status in (7,8)
	END
	BEGIN 
	INSERT INTO [dbo].[OutgoingMessagesControlStack]
           ([PackageNo]
           ,[ServiceName]
           ,[DestServiceName]
           ,[DestServerName]
           ,[DestPort]
           ,[ConnectString]
           ,[Status]
           ,[TryCount]
           ,[PasswordFld]
           ,[TimestampFld]
           ,[RemotePkg]
           ,[ErrorNo]
           ,[ServerMsg]
           ,[FinishedDateTime]
           ,[JobID]
           ,[CounterFld]
           ,[Forwarder]
           ,[MessageGUID]
           ,[CancelledByUser])
     SELECT 
           PackageNo
           ,ServiceName
           ,DestServiceName
           ,DestServerName
           ,DestPort
           ,ConnectString
           ,Status
           ,TryCount
           ,PasswordFld
           ,TimestampFld
           ,RemotePkg
           ,ErrorNo
           ,ServerMsg
           ,FinishedDateTime
           ,JobID
           ,CounterFld
           ,Forwarder
           ,MessageGUID
           ,CancelledByUser
           from INSERTED
         where Status = 9
    end
END
3 фев 16, 12:25    [18766412]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
gerogekochkin,

AFTER UPDATE здесь точно не при чём
3 фев 16, 12:26    [18766427]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Glory
Member

Откуда:
Сообщений: 104760
gerogekochkin
Есть еще один триггер:

Ну так вот и проверьте, не изменил ли кто значение этого поля после добавления
3 фев 16, 12:27    [18766433]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Как вы пишете INSERT?
Может, есть много таблиц [OutgoingMessages] в разных базах, с разными схемами?
Вставляете в одну таблицу, а результат хотите увидеть в другой?
3 фев 16, 12:28    [18766439]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
aleks2
Guest
И ведь никто не сказал: не нужен триггер INSTEAD OF INSERT.
3 фев 16, 12:38    [18766519]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
aleks2
И ведь никто не сказал: не нужен триггер INSTEAD OF INSERT.
Мне показалось, это просто прототип
3 фев 16, 12:40    [18766533]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
gerogekochkin
Member

Откуда: Москва
Сообщений: 93
Glory, никакой другой триггер не меняет значения полей после вставки.
Проблема происходит периодически. То есть часть вставок проходит хорошо, часть - нет...
3 фев 16, 14:12    [18767394]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
gerogekochkin,

значит дело не в том, что "триггер не срабатывает", а в том, что Ваш код триггера работает не так, как Вы ожидаете.
3 фев 16, 14:15    [18767416]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Владислав Колосов
gerogekochkin,

значит дело не в том, что "триггер не срабатывает", а в том, что Ваш код триггера работает не так, как Вы ожидаете.
Кстати, этот триггер ведь не такой, как нам показали?
Ибо показанный действительно не имеет смысла.
3 фев 16, 14:35    [18767565]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает триггер instead of insert  [new]
Glory
Member

Откуда:
Сообщений: 104760
gerogekochkin
Glory, никакой другой триггер не меняет значения полей после вставки.
Проблема происходит периодически. То есть часть вставок проходит хорошо, часть - нет...

А причем тут триггер ?
Только в триггерах что ли можно выполнять update ?
3 фев 16, 16:38    [18768551]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить