2012-09-29 3 views
1

SQL의 트리거 작업 중입니다. 업데이트 트리거를 수행하려고하지만 특정 조건이 충족되는 경우에만 작동하도록하고 싶습니다.SQL 업데이트 트리거 조건부

예를 들어 테이블 X와 두 개의 열 A, B가 있다고 가정 해 보겠습니다. 새 값을 업데이트하려면 A가 B보다 작을 때만 A 또는 B를 업데이트 할 수 있어야합니다. 내가 잘못하고 있어요 생각하지만

그래서 나는이

create trigger utrigger 
on X 
for update as 
if (update(A) OR update(B)) 
begin 


if (A>B) 
RAISERROR (N' Incorrect %s %d.', -- Message text. 
     10, -- Severity, 
     1, -- State, 
     N'number', -- First argument. 
     5); -- Second argument. 

같은 트리거를하고있는 중이 야. 이게 뭐야?

+0

이 조건은 삽입물에도 적용됩니까? 이것이 모든 행에 적용되어야하는 경우 CHECK (B <= A)에 대한 점검 제한 조건이 더 효율적입니다. –

답변

4

INSERTED 가상 테이블을 사용해야합니다.

create trigger utrigger 
on X 
for update as 
if (update(A) OR update(B)) 
begin 
if exists (SELECT * -- this subquery breaches the condition 
      FROM INSERTED 
      WHERE A>=B) -- might need some isnull if nulls are not allowed 
RAISERROR (N' Incorrect %s %d.', -- Message text. 
     10, -- Severity, 
     1, -- State, 
     N'number', -- First argument. 
     5); -- Second argument. 
end 
+0

예, 작동합니다. 감사 – Maverick

관련 문제