SQL에서 새로운 기능입니다. 아무도 트리거 벨로우즈를 수정하는 데 도움을 줄 수 있습니까?SQL 두 테이블을 업데이트하는 트리거
이 2 개의 테이블 (리뷰 및 제안)이 있습니다. 제안 테이블에서 데이터를 가져 오는 검토, 삽입 및 업데이트를 업데이트하고 싶습니다. 그리고 이것이 성공적으로 업데이트되면 ReviewId와 ReviewDate로 Offer Table을 업데이트하고 싶습니다.
저는 Azure에서 제공하는 SQL 서버를 사용하고 있습니다.
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
또한 질문에 'DELETE'에 대해서는 언급하지 않았지만 트리거는 'FOR DELETE'인 것처럼 보입니다. 동시에, 당신은'Deleted' 의사 테이블을 결코 보지 않을 것입니다 ->이 트리거는 DELETE 연산을 위해 아무 것도하지 않을 것입니다 .... –
안녕 Marc_s, 당신의 응답에 감사드립니다. Azure에서 제공하는 SQL을 사용하고 있습니다. 당신이 언급했듯이 나는 아직 삭제를 위해 아무것도하지 못했다. (나는 어떻게하는지 모른다). 또한 동일한 트리거에서 다른 thable에 대한 업데이트를 만들 수 있다고 생각합니까? 미리 감사드립니다. – Carlos
marc_c, 방아쇠를 방금 업데이트했습니다. 지금까지 예상대로 작동하고 있습니다. 그러나 코드가 조금 어설픈 것처럼 보입니다. (약간의 경험을 바탕으로)이 스크립트를 작성하는 것이 올바른 방법인지 알려주실 수 있습니까? 미리 감사드립니다. – Carlos