1

我创建了计算机审计应用程序。当我运行我的应用程序时,它会在浏览器上显示计算机附件,例如 computerName、osVersion、lastAudit、model、totalMemory、processor、userName。

我在 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
4

1 回答 1

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 触发器不是在受影响的每行调用 - 而是每条语句,如果您的INSERTorUPDATE语句影响多行,您将在Inserted伪表中有多个条目,您需要能够处理在你的触发器中有这个事实

于 2013-04-03T11:40:38.897 回答