SQL Trigger, который обновляет две таблицы
Я новичок в SQL, кто-нибудь, пожалуйста, помогите мне исправить ниже триггер.
У меня есть эти 2 таблицы (обзор и предложение), я хотел бы обновить таблицу обзора при вставке, обновлении и удалении, получая данные из таблицы предложений. И если это успешно обновлено, я хотел бы обновить Таблицу предложений с помощью ReviewId и ReviewDate.
Я использую сервер SQL, предоставленный Azure.
UserKey и Asin являются уникальными значениями, поэтому я использую их для связи этих таблиц. Я буду очень признателен за любую помощь!
Review
Таблица:
ReviewId | OfferId | Review | CustomerId | UserKey | Asin | ReviewDate
----------------------------------------------------------------------------------------
25224 null blah null 12354ddd 123456 11/24/2014
Offer
Таблица:
OfferId | CustomerId | UserKey | Asin | ReviewId | ReviewDate | Status
---------------------------------------------------------------------------------------------
25224 55555 12354ddd 12345 null null Pending Review
Это то, что я до сих пор:
// this trigger works, is there any other way to simplify this?
CREATE TRIGGER dbo.InserUpdateReview
ON dbo.Review
FOR INSERT, UPDATE, DELETE
AS
IF( Select Review.OfferId from Review, Inserted Where Review.ReviewId = Inserted.ReviewId ) IS NULL
BEGIN
//Update Review table first, this update it is working
UPDATE a
SET a.OfferId = ( Select Top(1) b.OfferId From dbo.Offer b Where b.UserKey = a.UserKey AND b.ASIN= a.ASiN AND b.ReviewId IS NULL ),
a.CustomerId = ( Select Top(1) b.CustomerId From dbo.Offer b Where b.UserKey = a.UserKey AND b.ASIN= a.ASiN AND b.ReviewId IS NULL )
FROM dbo.Review a
INNER JOIN Inserted i
ON a.ReviewId=i.ReviewId AND a.OfferId IS NULL AND a.CustomerId IS NULL
//update Offer table here,
UPDATE Top(1) o
SET o.ReviewId = (Select r.ReviewId From dbo.Review r Where r.UserKey = o.UserKey AND r.ASIN= o.ASiN AND r.ReviewId = ins.ReviewId ),
o.ReviewDate = getDate()
FROM dbo.Offer o
INNER JOIN Inserted ins
ON o.UserKey = ins.UserKey AND o.ASIN = ins.ASIN AND o.ReviewId IS NULL
END