触发器上的列无效

时间:2010-05-20 19:50:14

标签: sql sql-server

我收到错误无效的列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; 

3 个答案:

答案 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子句中重复它