2016-12-08 4 views
0

트리거 개념에 대해 이해하고 있지만 제약 조건을 적용하는 방법에 대해 혼란스러워합니다. 예를 들어 나는 두 개의 테이블을 가지고 있습니다 : student 테이블과 학생 주문서를 보여주는 book_order 테이블.SQL Server 트리거를 사용하여 제약 조건을 적용하는 방법

책 주문서가있는 학생을 학생 테이블에서 삭제할 수 없는지 확인하는 트리거를 만들고 싶습니다.

+0

, 당신은에 외래 키 제약 조건을 사용해야합니다 'book_order' 테이블에서'student' 테이블을 참조합니다.이 시나리오에서는 트리거가 필요하지 않다고 생각합니다. –

+1

질문은 foeign 키 대신 트리거를 사용해야하는 이유는 무엇입니까? –

+1

외래 키 제약 조건은 단순히 "대안"이 아닙니다. 이 조건을 표현하는 올바른 방법입니다. 이를 위해 트리거를 사용하면 안됩니다. 당신은 이것을 위해 트리거를 사용하는 것을 배워서는 안됩니다. –

답변

0

당신이 일어 났을 때 로그 또는 무언가에 기록하고 싶었지만하지 않는 한 당신이 이제까지 이렇게 왜 확실하지 ..... 대안으로

create TRIGGER Del_Student 
ON dbo.Student 
INSTEAD OF DELETE 
AS 
BEGIN 
    Declare @cnt int 
    Select @cnt = count(*) from deleted d 
    Inner Join BookOrders o on d.studentId = o.studentId 
    if (@cnt > 0) 
    BEGIN 
     RAISERROR ('Deletions not allowed from this table when bookorders exist for student)',  16, 1) 
    END 
END 
+0

감사합니다. 내가 말하는 오류가 발생했습니다 : 트리거를 작성하는 유일한 구문은 '@declare'근처의 잘못된 구문 및 잘못된 구문 (마지막) 근처에 있어야합니다. – jasmine

+0

죄송합니다. 지금 시도해보십시오. –

+0

감사합니다! 정확히 내가 무엇을 찾고 있었는지! – jasmine