2009-10-30 4 views
4

는이 같은 테이블 구조가 있습니다SQL 서버 트리거

상태 열 값이 값 을 업데이트 한 경우 I 상태 컬럼에 대한 트리거를 만들 필요가
create table status_master 
(
    Name varchar(40) 
    status varchar(10) 
) 

다음 트리거가 하나 삽입 commant를 호출 FAIL을 같은 :

insert into temp value('s',s's') 

아무쪼록이 문제를 해결할 수있는 아이디어를 제공해 주시겠습니까?

+3

당신이 명확하게 업데이트 할 수 있습니다 삽입과 같은 특정 테이블에서 수행?나는 당신이 정말로 달성하기를 원하는 것을 이해하지 못합니다 ... –

+0

예제에서와 같이 구문 오류가 발생하지 않습니다. – Dave

+0

marc_s와 일치합니다. "업데이트 된 가치"란 무엇입니까? 지위? "temp"라는 테이블의 구조는 무엇입니까? 당신이 거기에 넣은 가치는 무엇입니까? –

답변

0

당신이 찾고있는 것은 INSERT, UPDATE 트리거를 대신합니다. 트리거 내에서 try-catch 내부에서 삽입 또는 업데이트를 시도합니다. 오류가 발생하면 다른 테이블에 해당 값을 삽입합니다 (일종의 로깅 테이블이라고 가정). 당신이 정말로 무엇을 달성하고자하는

2

확실하지 -하지만 SQL 서버, 당신은 트리거의 두 가지 유형이 있습니다 AFTER

  • INSTEAD OF DELETE, INSERT, UPDATE 후 화재를 유발 작업 (INSERT, UPDATE, DELETE)을 잡아서 뭔가를 수행 할 수있는 트리거

SQL Server에는 BEFORE INSERT/UPDATE/DELETE 트리거가 없습니다 다른 RDBMS가 가지고 있습니다.

AFTER 트리거를 여러 개 가질 수 있지만 각 작업 (INSERT, UPDATE, DELETE)마다 하나의 INSTEAD OF 트리거 만 사용할 수 있습니다.

더 일반적인 경우, 뭔가처럼 AFTER 트리거입니다 : 여기

CREATE TRIGGER trgCheckInsertedValues 
ON status_master 
AFTER INSERT 
AS 
BEGIN 
    INSERT INTO dbo.temp(field1, field2, field3) 
    SELECT i.Name, i.Status 
    FROM inserted i 
    WHERE i.Status = 'FAIL' 
END 

, 당신의 테이블에 삽입 된 모든 행을 포함하는 "삽입"가상 테이블을 검사하고, 각 행에 대해 그 포함 "status = FAIL"이면 일부 필드가 "temp"테이블에 삽입됩니다.

다시 한 번 자세한 내용을 정확히 알지 못하지만 SQL Server T-SQL 코드에서이를 수행하는 방법을 대략적으로 설명합니다.

트리거 '삽입'로 새 레코드 행을 참조하고 '삭제'로 이전 :

마크

0

당신이 무슨 뜻인지 가정 상태의 새 값이 이것에 대해 다음 무엇을 실패해야한다

는 inserted.statu 경우

BEGIN

AS 넣으면 status_master에서 트리거의 trgCheckInsertedValues을 만들 dbo.temp INTO S 개의 = "FAIL" INSERT (필드 1, 2 필드는 FIELD3)
SELECT i.Name, i.Status는 SQL에서 난을