为什么这个触发器导致“无效列名'CreatedDT'”?

时间:2012-07-22 17:39:46

标签: sql-server sql-server-2005

以下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

1 个答案:

答案 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