我创建了计算机审计应用程序。当我运行我的应用程序时,它会在浏览器上显示计算机附件,如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
答案 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
伪表中有多个条目,你需要能够在触发器中处理这个事实