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

Откуда:
Сообщений: 89
Здравствуйте.
Нужно написать Триггер на таблицу TABLE1 на событие UPDATE
Чтоб при UPDATE таблицы TABLE1, данные из TABLE2 копировались в TABLE3.
При чем нужно джойнить еще одно поле COL3 из таблицы TABLE4
Все четыре таблицы связаны по полям COL1 и COL2.

данные из TABLE2 в TABLE3 должны копироваться только когда поле STATUS в TABLE1 будет равным 3.

То есть имеется запись в TABLE1. И как только поле статус в этой таблице станет равным 3, данные из TABLE2 должны копироваться в TABLE3, с подхватом одного поля из TABLE4.

Пишу следующее:

CREATE TRIGGER NEWTRIG ON TABLE1
FOR UPDATE
AS
SET NOCOUNT ON;

INSERT INTO TABLE3
SELECT COL1, COL2, COL3, COL4, TABLE4.COL3
FROM TABLE2

(INNER JOIN TABLE4
ON TABLE2.COL1 = TABLE4.COL1
WHERE TABLE2.COL2 = TABLE4.COL2)

(INNER JOIN inserted
ON TABLE2.COL1 = inserted.COL1
WHERE TABLE2.COL2 = inserted.COL2
AND inserted.STATUS = 3);

Но такая запись не верная. Не срабатывает. Помогите правильно написать запрос. Заранее спасибо
22 авг 12, 00:05    [13046471]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN из нескольких таблиц  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Уберите скобки, они тут не нужны.
Кто вас учил писать часть условия объединения в ON, а часть в WHERE? Выберите уж что-то одно. Лучше ON.
Ну и само собой, не надо придумывать свой синтаксис команд. WHERE в середине запроса недопустимо, если это конечно не под-запрос. Но вам никакие подзапросы не нужны, все пишется одним селектом.
22 авг 12, 00:33    [13046553]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN из нескольких таблиц  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Берегите наши глаза - используйте тег SRC
CREATE TRIGGER [trTable1_Update] ON [dbo].[Table1] -- Нормальные имена, не забывайте про схемы
AFTER UPDATE AS BEGIN -- FOR устаревший/неточный синтаксиси, про блок не забудте (BEGIN END), а то на половине скрипта может номально прокатить
	SET NOCOUNT ON;

-- IF Update(Status) -- чтоб не запускать если обновляются другое колонки
	INSERT	dbo.Table3	-- Опять схему забыли, перечислять в скобках колонки желательно, а то при изменении таблицы сломаться может
	SELECT	 I .Col1
		,I .Col2
		,T2.Col3
		,T2.Col4
		,T4.Col3
	FROM	     Inserted	I	-- Алиасы пишите всегда
		JOIN dbo.Table2	T2	ON T2.Col1 = I.Col1 AND T2.Col2 = I.Col2	-- Вы что логические выражение не умеете писать?
		JOIN dbo.Table4	T4	ON T4.Col1 = I.Col1 AND T4.Col2 = I.Col2
	--	JOIN Deleted	D	ON D.ID = I.ID -- D.Col1 = I.Col1 AND D.Col2 = I.Col2
	WHERE	    I.Status  = 3
	--	AND D.Status != 3 -- А если там что-то другое меняется или на тоже значение
END
GO
А по задаче нет смысла что-то копировать. Банально VIEW написать.
22 авг 12, 00:36    [13046558]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN из нескольких таблиц  [new]
elshad82
Member

Откуда:
Сообщений: 89
Спасибо. Было позновательно. И главное - так работает. Поставлю галочку
22 авг 12, 07:24    [13046826]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить