2012-06-21 2 views
4

SQL Server 2008 R2의 ObservationId, FirstCreatedDate, description, ... 및 LastUpdatedDate 열이있는 테이블을 만들었습니다. ObservationId은 1 씩 증가하는 ID입니다.SQL Server에서 INSERT 및 업데이트에서 트리거를 만듭니다.

두 개의 트리거를 만들려면 하나는 INSERT 용이고 다른 하나는 UPDATE 용입니다. 삽입 된 새 레코드에서 INSERT 트리거는 현재 datetime을 가져 와서 FirstCreatedDate 열을 업데이트합니다. 기존 레코드가 업데이트되는 동안 UPDATE 트리거는 현재 datetime을 가져 와서 LastUpdatedDate colunm을 업데이트합니다.

신원이 추측되는 것처럼 문제가 될 수 있습니다.

누구든지 저에게 손을 줄 수 있습니까? 감사!

건배, 알렉스

ALTER TRIGGER [dbo].[T_InsertNewObservation] ON [dbo].[GCUR_OBSERVATION] 
    AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for trigger here 
    UPDATE GCUR_OBSERVATION SET GCUR_OBSERVATION.FirstCreatedDate = getdate() 
    FROM GCUR_OBSERVATION a INNER JOIN INSERTED ins ON a.ObservationId = ins.ObservationId 

END 
+2

당신은 여기에 오류 포스트 제발 얻을 않았다! –

+0

테이블 편집 모드에서 새 레코드를 수동으로 추가하려고 시도했을 때 쿼리 창에서 sql INSERT를 사용하여 레코드를 추가 할 때 제대로 작동하지 않는 것은 이상합니다. 문제는 신원 확인 필드 옆에 빨간색 물음표가 있습니다. 그러나, 모든 쿼리를 선택했을 때 레코드가 추가되었습니다. ps. SQL Server Management Studio를 사용하고 있습니다. – alextc

답변

8

난 당신이 대부분 정확하지만 올바르게 삽입 또는 삭제 된 테이블을 접근하지 않는 생각합니다.

ALTER TRIGGER [dbo].[T_InsertNewObservation] ON [dbo].[GCUR_OBSERVATION] 
    AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- get the last id value of the record inserted or updated 
    DECLARE @id INT 
    SELECT @id = [ObservationId] 
    FROM INSERTED 

    -- Insert statements for trigger here 
    UPDATE GCUR_OBSERVATION 
    SET GCUR_OBSERVATION.FirstCreatedDate = GETDATE() 
    WHERE [ObservationId] = @id 

END 

ps. 잘하면이 메모장에서 쓴 것처럼 작동하고 그것을 테스트하지 않았습니다.

1

아래 코드는 AFTER UPDATE를 사용하여 마지막으로 변경 한 날짜 열을 수정하는 코드입니다.

문제가 있으면 알려주세요. 감사!

ALTER TRIGGER [dbo].[T_UpdateObservation] ON [dbo].[GCUR_OBSERVATION] 
AFTER UPDATE 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

-- get the last id value of the record inserted or updated 
DECLARE @id INT 
SELECT @id = [ObservationId] 
FROM DELETED 

-- Insert statements for trigger here 
UPDATE GCUR_OBSERVATION 
SET GCUR_OBSERVATION.LastUpdatedDate = getdate() 
WHERE [ObservationId] = @id 

END 
-1
Create TRIGGER [dbo].[TrigerName] ON [dbo].[TableCreateTriger] FOR INSERT AS 
INSERT INTO TableInsertDate SELECT * FROM TableCreateTriger 
관련 문제