2010-07-26 3 views
2

삽입 및 삭제 된 테이블에 대해 작업 할 트리거를 작성하려고합니다. 나는 삽입을위한 방아쇠를 썼다 :트리거에서 삽입 및 삭제 된 테이블 사용

CREATE TRIGGER FILL_TABLE 
ON Person FOR INSERT 
AS 
DECLARE @ID int 
SELECT @ID = p.ID 
FROM Person AS p 
    INNER JOIN inserted AS i ON p.ID = i.ID 
DECLARE @uName char(30); 
SELECT @uName = SYSTEM_USER 
INSERT tblOperationLog 
Values 
(@uName, 'user has inserted a row with ID = ' + CONVERT(nvarchar, @ID) + '', 
    'Insert', CURRENT_TIMESTAMP, GETDATE()) 

나는 방아쇠를 쓰고 삭제 한 테이블을 삽입 한 것과 같이 쓰고 싶다. 하지만 어떻게해야할지 모르겠다. tblOperationLog의 두 번째 열을 채우기 위해 삭제 된 행의 ID를 가져 오려고하지만 그럴 수 없습니다. 내부 조인을 사용해야합니까?

+2

어떤 sql 엔진이 필요합니까? –

+0

나는 SQL 서버 – anna

답변

4

SQL 서버에서 트리거는 트리거가 정의 된 테이블과 동일한 구조를 갖는 두 개의 논리 테이블 INSERTEDDELETED에 대한 액세스 권한을가집니다.

두 테이블 모두 UPDATE 트리거에 채워집니다. INSERT 트리거는 INSERTED 테이블 만 채우고, DELETE 트리거는 DELETED 테이블 만 채 웁니다.

MSDN을 참조하십시오.

12

트리거는 한 행만 삽입 된 경우에만 작동합니다. inserted을 테이블로 사용할 수 있으므로 해당 테이블에서 삽입하여 모든 레코드를 사용할 수 있습니다. 다음과 같은 것을 찾고 있다고 생각합니다.

CREATE TRIGGER FILL_TABLE 
ON Person FOR INSERT, DELETE 
AS 

    INSERT tblOperationLog 
    SELECT SYSTEM_USER,'user has inserted a row with ID = ' + ID, 'Insert', 
    CURRENT_TIMESTAMP, getdate() 
    FROM inserted 

    INSERT tblOperationLog 
    SELECT SYSTEM_USER,'user has deleted a row with ID = ' + ID, 'Delete', 
    CURRENT_TIMESTAMP, getdate() 
    FROM deleted 
+0

을 많이 사용하고 있습니다. 나는 그것을 테스트 할 것입니다 – anna

+0

도 업데이트 된 행을위한 테이블이 무엇입니까? 위와 같이 사용할 수 있습니까? – anna

+0

@anna - @ Oded의 대답에 따르면, 업데이트가 수행되면 이전 정보가있는 삭제 된 테이블에 행이 있으며, 새로운 정보가 삽입 된 테이블 – cjk

관련 문제