1

コンピューター監査アプリケーションを作成しました。アプリケーションを実行すると、computerName、osVersion、lastAudit、model、totalMemory、processor、userName などのコンピューター アクセサリがブラウザーに表示されます。

SQL Server 2008 で 1 つのテーブルを使用してデータベースを作成しました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

新しい行が挿入されているとき (または更新されているとき? よくわかりません...)、既存のテーブルの 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

覚えておくべき非常に重要な点の 1 つ: SQL Server トリガーは、影響を受ける行ごとではなく、ステートメントごとに呼び出されます。INSERTまたはUPDATEステートメントが複数の行に影響を与える場合、Inserted疑似テーブルに複数のエントリがあり、対処できる必要があります。その事実をトリガーに

于 2013-04-03T11:40:38.897 に答える