我有一个表创建日期和创建用户字段定义,似乎工作。如何将行更新时间和行更新用户添加到表中?
但我很难创建一个功能正常的行更新日期时间和行更新字段。
我想如何工作:当有人更新表中的记录时,日期/时间和用户名被记录为只有记录被更新。
这里是我的失败创建触发器语法,我已经不正确改编自上看到堆栈溢出的答案:
我要指出,我不明白的地方的“插入”表在其他许多前来例子。也不是为什么它和内部连接起作用。
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
上执行的触发创作语法错误是:
无效列名称 '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
那么这是否意味着插入的表在本次更新时基本上会有一行? – ChrisG
@ChrisG不太......它将有相同数量的原始更新正在更新的行数。这就是为什么你必须在条件下真正加入它。将X个原始行链接到X个插入行。希望这是有道理的。 –
它有一点意义,但我只需要做一些独立的阅读和研究。谢谢! – ChrisG