触发更新SQL Server中表的属性?

时间:2013-04-03 09:02:19

标签: sql sql-server-2008 triggers

我创建了计算机审计应用程序。当我运行我的应用程序时,它会在浏览器上显示计算机附件,如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

1 个答案:

答案 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触发器是每行受影响的 - 但是每个语句,以及INSERT或{ {1}}语句影响多行,UPDATE伪表中有多个条目,你需要能够在触发器中处理这个事实