多部分标识符" inserted.Id"创建触发器时无法绑定

时间:2015-07-16 13:40:22

标签: sql-server

我正在尝试在SQL Server 2012中的表上创建一个触发器,但是它给出了如下错误

"多部分标识符" inserted.Id"无法绑定",

我正在执行的查询是

CREATE TRIGGER dbo.[TR_t_documents_InsertUpdateDelete] ON 

dbo.[t_documents] AFTER INSERT, UPDATE, DELETE
AS
BEGIN 

    UPDATE dbo.[t_documents]
    SET dbo.[t_documents].[UpdatedAt] = CONVERT(DATETIMEOFFSET, SYSUTCDATETIME()) 
    FROM
        INSERTED
    WHERE inserted.[Id] = dbo.[t_documents].[Id]
END

在SQL Server 2014中成功执行。

任何人都可以帮助我在SQL Server 2012中发生这种情况的原因吗?

1 个答案:

答案 0 :(得分:6)

这是由于您对数据库的排序规则。在这种情况下,您使用区分大小写的排序规则,因此表名称必须一致。对于虚拟触发器表,这些表必须为大写,例如:

CREATE TRIGGER dbo.[TR_t_documents_InsertUpdateDelete] ON 

dbo.[t_documents] AFTER INSERT, UPDATE, DELETE
AS
BEGIN 

    UPDATE dbo.[t_documents]
    SET dbo.[t_documents].[UpdatedAt] = CONVERT(DATETIMEOFFSET, SYSUTCDATETIME()) 
    FROM
        INSERTED
    WHERE INSERTED.[Id] = dbo.[t_documents].[Id]
    --    ^^^^^^^^
    --      THIS!
END