2013-04-03 55 views
1

我創建了計算機審計應用程序。當我運行我的應用程序時,它會在計算機名稱,osVersion,lastAudit,model,totalMemory,processor,userName等瀏覽器上顯示計算機附件。更新SQL Server中表的屬性時觸發?

我在SQL Server 2008中創建了一個數據庫,其中有一個表Computers。當一個值被插入到該表中時,我需要更新列中的表值。試圖嘗試這個,我使用觸發器。但是,我不完全瞭解觸發器的工作原理。

有人可以告訴我如何做到這一點。

我的表有這些列:

id, computerName, osVersion, lastAudit, model, totalMemory, processor, userName 

我知道在這個代碼一些錯誤或丟失的,但我無法完成這一點。在這方面請幫助我。

CREATE TRIGGER update_trigger 
    ON computers 
    AFTER UPDATE 
    AS 
    BEGIN 
declare @id as int 
declare @computerName as varchar(100) 
declare @osVersion as varchar(100) 
declare @lastAudit as datetime 
declare @model as varchar(100) 
declare @totalMemory float 
declare @processor as varchar(100) 
declare @userName as varchar(100) 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
if update(id) 
BEGIN 
    insert into computers values(@id,@computerName,@osVersion,@lastAudit,@model, 
          @totalMemory,@processor,@userName,'Update') 

SET NOCOUNT ON; 

    END 
    GO 
+2

當您更新「計算機」表中的行時,爲什麼要將另一行插入到同一個表中?重點是什麼?對於審計,您通常會將行*插入到單獨的「審計」表中 - 與您更新數據時不在同一個表中。 –

+0

好吧,首先,我試圖更新行,但它不工作,所以我正在嘗試這個代碼。 –

+0

好的,謝謝你的評論對我有幫助。接下來的一點是,我希望當新的計算機添加時我的表格會自動更新,因此您可以在這方面編輯我的觸發器代碼。 –

回答

1

如果你想簡單地更新現有的表的一列或多列時插入新行(或當它們被更新不是很清楚......?),嘗試這樣的觸發器:

CREATE TRIGGER trigUpdateTable 
ON dbo.Computers 
AFTER INSERT -- or AFTER UPATE or AFTER INSERT, UPDATE 
AS 
BEGIN 
    -- do whatever you want to do on INSERT and/or UPDATE 
    UPDATE 
     dbo.Computers 
    SET 
     LastAudit = GETDATE() 
    FROM 
     dbo.Computers c 
    INNER JOIN 
     Inserted i ON c.id = i.id 

其中很重要的一點要記住:SQL Server的觸發器每個受影響的行不稱爲 - 但每個語句,如果你的INSERTUPDATE語句影響多行,你就必須在多個條目Inserted僞表格,並且您需要能夠在觸發器中處理該事實

+0

我明白你的觀點。在這裏,我感到困惑,我會用哪個觸發器。我從你的帖子中清除了我的困惑。非常感謝。 –