【发布时间】:2017-05-09 20:48:10
【问题描述】:
我有一个表,其中定义了创建日期和创建用户字段,似乎正在工作。
但我在创建功能正常的行更新日期时间和按字段更新的行时遇到了困难。
我希望这些字段如何工作:当有人更新表中的记录时,仅正在更新的记录会记录日期/时间和用户名。
这是我失败的触发器创建语法,我错误地改编自 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
执行触发器创建语法的错误是:
列名“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
【问题讨论】:
标签: sql sql-server tsql sql-server-2016