2012-03-13 2 views
1

SQL Server 2008 Trigger를 연구 중이며 삽입 된 데이터를 사용하여 테이블의 데이터를 비교하는 방법에 대한 질문이 있습니다. 예를 들어 SQL Server 2008 트리거 : 입력 키로 데이터 비교

,

|id|section_id|current_num_student|max_num_student| 
|1 |1   | 23    | 23   | 
|2 |3   | 21    | 29   | 
|3 |5   | 50    | 50   | 

current_num_student 클래스에서 학생의 수와 max_num_student 클래스에서 최대 우리가 테이블 안에 테이블 "testTb1"

이 있다고 할 수 있습니다. max_num_student는 교사가 정의하므로 숫자가 될 수 있습니다.

학생은 현재 섹션 5를 추가하려고하지만 current_num_student는 max_num_student와 같습니다. 그러므로 우리는 학생을 거부해야합니다. 쿼리가 같은입니다

..

update testTb1 SET current_num_student = current_num_student + 1 WHERE section_id = ? 

"?" JSP로 사용자가 입력 한 데이터가됩니다.

때문에, 나는 정말 모르겠습니다

.. 그러나, 나는 점점 오전 오류 같은 ... 같은 트리거는 할 그

같은

CREATE TRIGGER testTrg 
on dbo.testTb1 
    AFTER UPDATE 
AS 
IF EXISTS(select section_id FROM inserted i join dbo.testTb1 m on i.section_id = m.section_id 
      AND m.num_cur = m.num_max) 
    BEGIN 
     RAISERROR ('Can not update data because class is full', 16,1); 
     ROLLBACK TRANSACTION; 
     RETURN 
    END 

뭔가를 시도하고 있었다 문제를 해결하는 방법.

+1

무엇이 오류입니까? 게시하는 것을 잊어 버린 것 같습니다 ... – Diego

+0

메시지 8197, 수준 16, 상태 4, 프로 시저 testTrg, 줄 1 'dbo.testTb1'개체가 없거나이 작업에 유효하지 않습니다. 이 오류가 발생합니다 : ( –

+0

'testTb1'이 정말로 테이블의 이름인지 확인하십시오 'dbo' 스키마에서 생성되었는지 정말로 확신합니까? 오른쪽에 트리거를 생성하려고합니까? database? 'dbo' 접두사없이 트리거를 생성 하시겠습니까? –

답변

0

나는 당신이 가입 할 필요가 없다고 생각한다. 어때?

CREATE TRIGGER testTrg 
on dbo.testTb1 
    AFTER UPDATE 
AS 
IF EXISTS(select 1 FROM inserted i where i.num_cur = m.num_max) 
    BEGIN 
     RAISERROR ('Can not update data because class is full', 16,1); 
     ROLLBACK TRANSACTION; 
     RETURN 
    END 
+0

m.num_max를 어떻게 참조 할 수 있습니까? –

+1

'EXISTS' 절이 별칭'm'을 어떻게 해결할 것입니까? –

0

나는이 방아쇠 밖으로 롤백을해야한다고 생각한다. 내가 틀렸을 수도 있지만 SQL 서버는 동일한 범위에서 Begin Transaction 문을 원할 것이라고 생각합니다.

마이크