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

Откуда:
Сообщений: 111
Есть код:
DECLARE	@variable	TABLE (ID Int)

WITH	 SAMPLE AS (
		SELECT	 54687						AS [Type]		
			,'BEM501848077'					AS Controler
			,T.summa					AS Amount
			,T.Comission					AS Commission
			,'RE50184RE8081'				AS Code
			,'2013-02-02 00:00:00.000'			AS [Date]
			,null						AS [Partner]
			,'222222222222'					AS Account
		FROM	Table1
	)
	MERGE	Table2	R
	USING	SAMPLE			S ON R.[Type]	 = S.[Type]
					 AND R.Controler = S.Controler
	WHEN	MATCHED			 AND R.[State]	 = 5555
	THEN	UPDATE
		SET	 Pole3	= S.Amount
			,Pole4	= S.Commission
			,Pole5	= S.Code
			,Pole6	= S.[Date]
			,Pole7	= S.Account	
	WHEN	NOT MATCHED BY TARGET
	THEN	INSERT	(Pole1,Pole2,Pole3,Pole4,Pole5,Pole6,Pole7)
		VALUES	([Type],Controler,Amount,Commission,Code,[Date],Account)
	OUTPUT	Inserted.ID
	INTO	@variable;


при запуске выдает ошибку:
срабатывает тригер на UPDATE: нельзя вводить Account = '222222222222' ;
но дело в том что в данном случае UPDATE вообще не должен срабатывать так как условия
R.[Type] = S.[Type]
AND R.Controler = S.Controler
не выполняются
9 апр 13, 14:01    [14156560]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
iap
Member

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

триггеры срабатываю всегда.
Просто если ни одной записи не затрагивается, inserted и deleted - пустые
9 апр 13, 14:08    [14156598]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
http://msdn.microsoft.com/ru-ru/library/bb510625(v=sql.100).aspx
Реализация триггера
Для каждой операции вставки, обновления или удаления, указанной в инструкции MERGE, SQL Server запускает все соответствующие триггеры AFTER, определенные для целевой таблицы, но не гарантирует определенного порядка запуска триггеров. Триггеры, которые определены для одного и того же действия, реализуются в порядке, указанном пользователем. Дополнительные сведения о настройке порядка выполнения триггеров см. в разделе Указание первого и последнего триггеров.

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

Если в таблице target_table определены триггеры INSTEAD OF UPDATE или INSTEAD OF DELETE, то операции обновления или удаления не выполняются. Вместо этого запускаются триггеры, а таблицы inserted и deleted заполняются соответствующим образом.

Если в таблице target_table определены триггеры INSTEAD OF INSERT, то операции вставки не выполняются. Вместо этого запускаются триггеры, и таблица inserted заполняется соответствующим образом.
9 апр 13, 14:12    [14156629]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104760
MaxiMaxiM
при запуске выдает ошибку:
срабатывает тригер на UPDATE

Вы уверены, что на UPDATE ?
Вы убирали части MATCHED и NOT MATCHED, чтобы проверить это ?
9 апр 13, 14:22    [14156671]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
iap
Member

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

прежде, чем ответить, я проверил:
USE tempdb;
IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
GO
CREATE TABLE T(X INT, Y INT);
INSERT T(X,Y) VALUES(1,3),(1,NULL),(1,-1),(2,5),(2,7);
GO
CREATE TRIGGER tuT ON T FOR UPDATE AS SELECT * FROM inserted;
GO
MERGE T USING(SELECT NULL, 55) U(X,Y) ON T.X=U.X
WHEN MATCHED THEN UPDATE SET Y=U.Y;
GO
IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
9 апр 13, 14:27    [14156693]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
прежде, чем ответить, я проверил:

ТС уверяет, что триггер не просто срабатывает, а имеет заполненные таблицы inserted/deleted
Причем заполенные вопреки условию MATCHED
9 апр 13, 14:29    [14156706]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Glory
iap
прежде, чем ответить, я проверил:

ТС уверяет, что триггер не просто срабатывает, а имеет заполненные таблицы inserted/deleted
Причем заполенные вопреки условию MATCHED
Небось, триггер на UPDATE не заморачивается количеством затронутых записей
и работает одинаково в любом случае.

Почти для каждого из нас когда-то было открытием,
что триггер срабатывает, а ничего и не изменялось.
9 апр 13, 14:34    [14156734]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
iap
Glory
пропущено...

ТС уверяет, что триггер не просто срабатывает, а имеет заполненные таблицы inserted/deleted
Причем заполенные вопреки условию MATCHED
Небось, триггер на UPDATE не заморачивается количеством затронутых записей
и работает одинаково в любом случае.

Почти для каждого из нас когда-то было открытием,
что триггер срабатывает, а ничего и не изменялось.
Хотя, откуда в таком случае триггер узнал про '222222222222'??
9 апр 13, 14:39    [14156765]     Ответить | Цитировать Сообщить модератору
 Re: Срабатывает тригер на UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
iap
iap
пропущено...
Небось, триггер на UPDATE не заморачивается количеством затронутых записей
и работает одинаково в любом случае.

Почти для каждого из нас когда-то было открытием,
что триггер срабатывает, а ничего и не изменялось.
Хотя, откуда в таком случае триггер узнал про '222222222222'??
Разве что это один триггер и на вставку и на апдейт, но криво написанный
9 апр 13, 14:40    [14156773]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить