2010-05-20 2 views
1

Я получаю ошибку с недопустимым столбцом 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; 

ответ

4

USER является зарезервированным SQL ключевых слов, так что вам нужно, чтобы написать его как [media].[user] вместо этого.

Кроме того, вы не можете использовать псевдоним в предложении WHERE. Вам нужно будет вернуть полное выражение:

WHERE coalesce(p.author, [media].[user]) <> INSERTED.author; 
+0

Вот почему зарезервированные слова делают неправильный выбор для имен объектов! Было бы хорошо, если бы люди исправили их, как только они напишут первый запрос и поймут, что это зарезервированное слово! – HLGEM

+0

HLGEM: таблица генерируется не только, но столбец не был зарезервированным словом в sqlite (и я думаю, что mysql). – 2010-05-20 20:15:52

1

Имеется ли столбец в таблице? COALESCE заменит значение NULL, не являющееся отсутствующим столбцом.

Кроме того, это [media.user] должны быть средства массовой информации. [Пользователь]

вы также должны повторить его в ИНЕКЕ

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.

Смежные вопросы