2012-06-21 72 views
4

我已經創建了一個包含以下列的表:SQL Server 2008 R2中的ObservationId,FirstCreatedDate,description,...和LastUpdatedDate。 ObservationId是一個身份,增加1.SQL Server在INSERT和Update上創建觸發器

我需要創建兩個觸發器,一個用於INSERT,另一個用於UPDATE。在插入新記錄時,INSERT觸發器將通過獲取當前日期時間來更新FirstCreatedDate列;在更新現有記錄時,UPDATE觸發器將通過獲取當前日期時間來更新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

當我手動嘗試在編輯表模式下添加新記錄時,我在查詢窗口中使用INSERT sql添加一條記錄,但未正確成功時發現這裏的代碼很奇怪。問題是識別ID字段旁邊出現一個紅色問號;然而,當我做了一個選擇所有查詢,記錄被添加.... 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