我收到错误无效的列media.user和tuid。在运行之前我看到media.user确实存在,我认为coalesce()作为tuid将解决tuid问题。
为什么这些列无效?
CREATE TRIGGER media_comment_trig_0 ON media_comment AFTER INSERT AS
INSERT INTO user_incoming_media_comments(recipient, comment)
SELECT coalesce(p.author, [media.user]) as tuid, INSERTED.id
FROM media
JOIN INSERTED ON media.id = INSERTED.media
LEFT JOIN media_comment p on p.id=INSERTED.parent
WHERE tuid <> INSERTED.author;
答案 0 :(得分:4)
USER是一个保留的SQL关键字,因此您需要将其写为[media].[user]
。
此外,您不能在WHERE子句中使用别名。你必须把完整的表达放回去:
WHERE coalesce(p.author, [media].[user]) <> INSERTED.author;
答案 1 :(得分:2)
将[media.user]
更改为[media].[user]
,[
和]
会导致SQL Server认为[media.user]
是列名,而不是table.column。
此外,您需要将WHERE tuid <> INSERTED.author;
更改为WHERE coalesce(p.author, [media].[user]) <> INSERTED.author;
。您必须重复COALESCE并且不能在WHERE中使用列别名。
答案 2 :(得分:1)
表中是否存在该列? COALESCE将替换 NULL 值而不是缺少列。
此[media.user]也应该是媒体。[user]
您还需要在WHERE子句中重复它