如何将行更新时间和行更新用户添加到表中?

Chr*_*isG 2 sql t-sql sql-server sql-server-2016

我有一个表创建日期和创建用户字段定义似乎工作.

但是我在创建一个功能正常的行更新日期时间和行更新字段时遇到了困难.

我希望字段如何工作:当有人在表中更新记录时,记录正在更新的记录的日期/时间和用户名.

这是我失败的触发器创建语法,我错误地改编自Stack Overflow上的答案:

我应该注意,我不明白"插入"表在许多其他例子中的来源.也不是为什么它和内部联合起作用.

CREATE TRIGGER mkt.Update_tbl_fTesting
  ON mkt.tbl_fTesting
  FOR UPDATE
AS

BEGIN
  SET NOCOUNT ON;

  UPDATE mkt.tbl_fTesting
    SET RowUpdateDateTime = GetDate()
      , RowUpdateBy = coalesce(SUSER_SNAME(), '?')
    FROM mkt.tbl_fTesting
    INNER JOIN inserted
    ON tbl_fTesting.tbl_fTestingIdentity = inserted.ID;
END
GO
Run Code Online (Sandbox Code Playgroud)

执行触发器创建语法的错误是:

列名称"ID"无效

这是我的预期表创建语法:

USE [ObscuredDatabase]
GO

DROP TABLE [mkt].[tbl_fTesting]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [mkt].[tbl_fTesting](
    [tbl_TestingIdentity] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
  [Produce] [nvarchar] (25) NOT NULL,
  [Color] [nvarchar] (25) NOT NULL,
  [RowCreateDateTime] [datetime] NULL DEFAULT (getdate()),
  [RowCreateBy] [nvarchar](max) NULL DEFAULT (coalesce(suser_sname(),'?')),
  [RowUpdateDateTime] [datetime] NULL,
  [RowUpdateBy] [nvarchar](max) NULL
PRIMARY KEY CLUSTERED 
(
    [tbl_fTestingIdentity] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SECONDARY]
) ON [SECONDARY]

GO
Run Code Online (Sandbox Code Playgroud)

Rig*_*iri 8

好吧,您的表的主键未被调用ID,tbl_TestingIdentity因此在插入时需要使用此列名称.(inserted.tbl_TestingIdentity)