sql-server - 创建触发器时无法绑定(bind)多部分标识符 "inserted.Id"

标签 sql-server

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

"无法绑定(bind)多部分标识符 "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 中会发生这种情况?

最佳答案

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

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

关于sql-server - 创建触发器时无法绑定(bind)多部分标识符 "inserted.Id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455890/

相关文章:

sql-server - 从 XML 字段中选择,其中 XML 字段 = X

sql-server - 字段未修复时使用 Pivot 的 SQL 查询

sql - MSSQL : Only last entry in GROUP BY (with id)

sql-server - 您可以对数据透视表中的行和/或列进行小计吗?

sql-server - SQL 紧凑选择顶部 1

sql-server - 连接到在并行 VM 中运行的 SQLServer

sql - 根据两对组合的权重找到最接近的数字

sql-server - SQL Server CASE表达式不会短路吗?

c# - Sql Server 以编程方式从远程客户端还原/备份数据库

sql - 选择总计以仅返回 SQL Server 中的一条记录