我试图在SQL Server 2012中的表上创建一个触发器,但它给出了如下错误
"多部分标识符"已插入.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
Run Code Online (Sandbox Code Playgroud)
这在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
Run Code Online (Sandbox Code Playgroud)