以下SQL创建一个没有错误的触发器。当我在SSMS中添加记录时,触发器失败并显示以下消息:
Msg 207,Level 16,State 1,Line 4
列名称“CreatedDT”无效。
我做错了什么?这是SQL Server 2005(v9.0.3080)。谢谢!
CREATE TRIGGER TRG_XXX_CreatedOn ON dbo.XXX
AFTER INSERT
AS
BEGIN
UPDATE dbo.XXX
SET dbo.XXX.CreatedDT = GETDATE()
WHERE dbo.XXX.Id IN (SELECT Id FROM Inserted)
END
GO
答案 0 :(得分:1)
对我来说很好。
我认为你的表不能有一个名为CreatedDT
的列。请仔细检查一下(包括名称的情况,因为您的整理可能区分大小写)
而不是在INSERT
上设置一个触发器,你不能仅仅在该列上设置默认约束吗?这比通过触发器更有效率。
有效的测试脚本
CREATE TABLE dbo.XXX
(
Id int,
CreatedDT DATETIME
)
GO
CREATE TRIGGER TRG_XXX_CreatedOn ON dbo.XXX
AFTER INSERT
AS
BEGIN
UPDATE dbo.XXX
SET dbo.XXX.CreatedDT = GETDATE()
WHERE dbo.XXX.Id IN (SELECT Id FROM Inserted)
END
GO
INSERT INTO dbo.XXX(Id) VALUES(1)
GO
SELECT * FROM dbo.XXX