2016-08-13 2 views
-1

를 구현하는 나는이 테이블 InspectionsReview라는이 : 여기 문제 해결 SQL 서버 트리거

CREATE TABLE InspectionsReview 
(
    ID int NOT NULL AUTO_INCREMENT, 
    InspectionItemId int, 
    SiteId int, 
    ObjectId int, 
    DateReview DATETIME, 
    PRIMARY KEY (ID) 
); 

테이블 모양을 :

+----+------------------+--------+-----------+--------------+ 
| ID | InspectionItemId | SiteId | ObjectId | DateReview | 
+----+------------------+--------+-----------+--------------+ 
| 1 | 3    | 3  | 3045  | 20-05-2016 | 
| 2 | 5    | 45 | 3025  | 01-03-2016 | 
| 3 | 4    | 63 | 3098  | 05-05-2016 | 
| 4 | 5    | 5  | 3041  | 03-04-2016 | 
| 5 | 3    | 97 | 3092  | 22-02-2016 | 
| 6 | 1    | 22 | 3086  | 24-11-2016 | 
| 7 | 9    | 24 | 3085  | 15-12-2016 | 
+----+------------------+--------+-----------+--------------+ 

내가 새 행을 삽입하기 전에 확인 트리거를 작성할 필요를 테이블에 이미 'ObjectId'및 'DateReview'와 같은 열 값이있는 행이 삽입 된 행의 열 값과 같은 경우 해당 행의 종료 ID를 가져와 넣어야합니다. duplicate이라는 변수를 트리거하십시오.

예를 들어, 삽입하는 새로운 행이 인 경우 InspectionsReview 테이블의 행 ID했기 때문에

INSERT INTO InspectionsReview (InspectionItemId, SiteId, ObjectId, DateReview)] 
VALUES (4, 63, 3098, '05-05-2016'); 

SQL 서버 트리거 중복 변수 3

같아야 = 3은 ObjectIdDateReview 값을 새 행에 삽입해야합니다. 어떻게 구현할 수 있습니까?

+0

id 컬럼의 데이터 유형은? 무엇인가가 정체성입니다입니까? – TheGameiswar

+0

이 부분도 분명하지 않습니다 .. "행의 ID를 가져 와서 복제라는 varialble을 넣고 싶습니다."샘플 예상 출력을 보여 주실 수 있습니까? – TheGameiswar

+0

이 부분에서는 "새 것보다 먼저 검사하는 트리거를 작성해야합니다. 검사 검토에 삽입 된 행 "이며이 경우"해당 ID가있는 경우 행 ID를 가져 와서 복제본이라는 트리거가있는 행을 삽입하려고합니다. " ** 삽입하기 전에 ** 확인을 수행하면 다른 테이블에 삽입 할 수있는 ID를 어떻게 얻을 수 있습니까? – DVT

답변

0

다른 테이블에 모든 복제본을 기록하려면 다음과 같이하십시오. 내 솔루션은 복제본을 확인하여 로깅 테이블에 삽입하는 AFTER 트리거를 만드는 것입니다. 물론 이것이 솔루션인지 여부는 내 추가 가정이 유효한 지 여부에 달려 있습니다.

여기 내 로깅 테이블입니다. 여기

CREATE TABLE dbo.InspectionsReviewLog (
    ID int 
    , ObjectID int 
    , DateReview DATETIME 
    , duplicate int 
); 

은 (여분의 가정에 매우 간단) 트리거

CREATE TRIGGER tr_InspectionsReview 
ON dbo.InspectionsReview 
AFTER INSERT 
AS 
BEGIN 
    DECLARE @tableVar TABLE(
     ID int 
     , ObjectID int 
     , DateReview DATETIME 
    ); 

    INSERT INTO @tableVar (ID, ObjectID, DateReview) 
    SELECT DISTINCT inserted.ID, inserted.ObjectID, inserted.DateReview 
    FROM inserted 
     JOIN dbo.InspectionsReview ir ON inserted.ObjectID=ir.ObjectID AND inserted.DateReview=ir.DateReview AND inserted.ID <> ir.ID; 

    INSERT INTO dbo.InspectionsReviewLog (ID, ObjectID, DateReview, duplicate) 
    SELECT ID, ObjectID, DateReview, 3 
    FROM 
     @tableVar; 


END;