我正在尝试在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中发生这种情况的原因吗?
答案 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