我正在尝试在 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/